86
Mới! Lưu câu hỏi hoặc câu trả lời và sắp xếp nội dung yêu thích của bạn. Tìm hiểu thêm.
Learn more.
Tôi đang cố gắng sử dụng OpenCV 2.1 để kết hợp hai hình ảnh thành một, với hai hình ảnh được đặt liền kề với nhau. Trong Python, tôi đang làm:
import numpy as np, cv
img1 = cv.LoadImage[fn1, 0]
img2 = cv.LoadImage[fn2, 0]
h2, w1 = img1.height,img1.width
h2, w2 = img2.height,img2.width
# Create an array big enough to hold both images next to each other.
vis = np.zeros[[max[h2, h2], w1+w2], np.float32]
mat1 = cv.CreateMat[img1.height,img1.width, cv.CV_32FC1]
cv.Convert[ img1, mat1 ]
mat2 = cv.CreateMat[img2.height, img2.width, cv.CV_32FC1]
cv.Convert[ img2, mat2 ]
# Copy both images into the composite image.
vis[:h2, :w1] = mat1
vis[:h2, w1:w1+w2] = mat2
h,w = vis.shape
vis2 = cv.CreateMat[h, w, cv.CV_32FC3]
vis0 = cv.fromarray[vis]
cv.CvtColor[vis0, vis2, cv.CV_GRAY2BGR]
cv.ShowImage['test', vis2]
cv.WaitKey[]
Hai hình ảnh đầu vào là:
//code.ros.org/trac/opencv/browser/trunk/opencv/samples/c/box.png?rev=2270
//code.ros.org/trac/opencv/browser/trunk/opencv/samples/c/box_in_scene.png?rev=2270
Hình ảnh kết quả là:
Có thể khó phân biệt với phần còn lại của trang web, nhưng hầu hết hình ảnh đều có màu trắng, tương ứng với nơi các hình ảnh riêng lẻ nên ở. Khu vực màu đen là nơi không có dữ liệu hình ảnh được viết.
Tại sao tất cả dữ liệu hình ảnh của tôi được chuyển đổi thành màu trắng?
Hỏi ngày 28 tháng 9 năm 2011 lúc 20:11Sep 28, 2011 at 20:11
4
Đối với các trường hợp hình ảnh của bạn có cùng kích thước [là trường hợp phổ biến để hiển thị kết quả xử lý hình ảnh], bạn có thể sử dụng numpy's Concatenate để đơn giản hóa mã của mình.
Để xếp chồng theo chiều dọc [IMG1 qua IMG2]:
vis = np.concatenate[[img1, img2], axis=0]
Để xếp chồng ngang [IMG1 ở bên trái của IMG2]:
vis = np.concatenate[[img1, img2], axis=1]
Để xác minh:
import cv2
import numpy as np
img1 = cv2.imread['img1.png']
img2 = cv2.imread['img2.png']
vis = np.concatenate[[img1, img2], axis=1]
cv2.imwrite['out.png', vis]
Hình ảnh out.png sẽ chứa img1 ở bên trái và img2 ở bên phải.
Đã trả lời ngày 16 tháng 1 năm 2014 lúc 18:47Jan 16, 2014 at 18:47
Matt Libertymatt LibertyMatt Liberty
2.3361 Huy hiệu vàng17 Huy hiệu bạc17 Huy hiệu đồng1 gold badge17 silver badges17 bronze badges
2
Đối với những người đang tìm cách kết hợp 2 hình ảnh màu thành một, đây là một bản mod nhỏ về câu trả lời của Andrey đã làm việc cho tôi:color images into one, this is a slight mod on Andrey's answer which worked for me :
img1 = cv2.imread[imageFile1]
img2 = cv2.imread[imageFile2]
h2, w1 = img1.shape[:2]
h2, w2 = img2.shape[:2]
#create empty matrix
vis = np.zeros[[max[h2, h2], w1+w2,3], np.uint8]
#combine 2 images
vis[:h2, :w1,:3] = img1
vis[:h2, w1:w1+w2,:3] = img2
Đã trả lời ngày 2 tháng 7 năm 2014 lúc 2:55Jul 2, 2014 at 2:55
FacepalmfacepalmFacePalm
9.8865 huy hiệu vàng45 Huy hiệu bạc48 Huy hiệu đồng5 gold badges45 silver badges48 bronze badges
1
import numpy as np, cv2
img1 = cv2.imread[fn1, 0]
img2 = cv2.imread[fn2, 0]
h2, w1 = img1.shape[:2]
h2, w2 = img2.shape[:2]
vis = np.zeros[[max[h2, h2], w1+w2], np.uint8]
vis[:h2, :w1] = img1
vis[:h2, w1:w1+w2] = img2
vis = cv2.cvtColor[vis, cv2.COLOR_GRAY2BGR]
cv2.imshow["test", vis]
cv2.waitKey[]
Hoặc nếu bạn thích cách di sản:
import numpy as np, cv
img1 = cv.LoadImage[fn1, 0]
img2 = cv.LoadImage[fn2, 0]
h2, w1 = img1.height,img1.width
h2, w2 = img2.height,img2.width
vis = np.zeros[[max[h2, h2], w1+w2], np.uint8]
vis[:h2, :w1] = cv.GetMat[img1]
vis[:h2, w1:w1+w2] = cv.GetMat[img2]
vis2 = cv.CreateMat[vis.shape[0], vis.shape[1], cv.CV_8UC3]
cv.CvtColor[cv.fromarray[vis], vis2, cv.CV_GRAY2BGR]
cv.ShowImage["test", vis2]
cv.WaitKey[]
Đã trả lời ngày 28 tháng 9 năm 2011 lúc 20:44Sep 28, 2011 at 20:44
Andrey Kamaevandrey KamaevAndrey Kamaev
29.1k6 Huy hiệu vàng89 Huy hiệu bạc86 Huy hiệu đồng6 gold badges89 silver badges86 bronze badges
2
Bạn cũng có thể sử dụng các hàm sẵn của OpenCV
vis = np.concatenate[[img1, img2], axis=0]
3 và vis = np.concatenate[[img1, img2], axis=0]
4 giống như tên của chúng được sử dụng để tham gia hình ảnh theo chiều ngang và chiều dọc tương ứng.import cv2
img1 = cv2.imread['opencv/lena.jpg']
img2 = cv2.imread['opencv/baboon.jpg']
v_img = cv2.vconcat[[img1, img2]]
h_img = cv2.hconcat[[img1, img2]]
cv2.imshow['Horizontal', h_img]
cv2.imshow['Vertical', v_img]
cv2.waitKey[0]
cv2.destroyAllWindows[]
Sự kết hợp ngang
Sự kết hợp dọc
Đã trả lời ngày 12 tháng 5 năm 2020 lúc 21:09May 12, 2020 at 21:09
Vardan Agarwalvardan AgarwalVardan Agarwal
1.8432 huy hiệu vàng14 Huy hiệu bạc27 Huy hiệu đồng2 gold badges14 silver badges27 bronze badges
1
Để xếp chồng theo chiều ngang:
imgHor = np.hstack[[img, img]]
Để xếp chồng theo chiều dọc:
imgVer = np.vstack[[img, img]]
Để hiển thị:
vis = np.concatenate[[img1, img2], axis=0]
0
Tomerikoo
16.7K15 Huy hiệu vàng38 Huy hiệu bạc54 Huy hiệu đồng15 gold badges38 silver badges54 bronze badges
Đã trả lời ngày 5 tháng 5 năm 2021 lúc 19:07May 5, 2021 at 19:07
Ba cách tốt nhất để thực hiện nó bằng cách sử dụng một dòng mã
vis = np.concatenate[[img1, img2], axis=0]
1Đã trả lời ngày 11 tháng 11 năm 2020 lúc 11:32Nov 11, 2020 at 11:32
Trong OpenCV 3.0, bạn có thể sử dụng nó dễ dàng như sau:
vis = np.concatenate[[img1, img2], axis=0]
2Đã trả lời ngày 21 tháng 1 năm 2020 lúc 13:57Jan 21, 2020 at 13:57
1