[PYTHON] OpenCV와 두 이미지 결합
PYTHONOpenCV와 두 이미지 결합
OpenCV 2.1을 사용하여 두 이미지를 하나로 결합하려고합니다. 두 이미지는 서로 인접 해 있습니다. 파이썬에서는 다음과 같은 작업을 수행합니다.
import numpy as np, cv
img1 = cv.LoadImage(fn1, 0)
img2 = cv.LoadImage(fn2, 0)
h1, 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(h1, 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[:h1, :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()
두 입력 이미지는 다음과 같습니다.
https://code.ros.org/trac/opencv/browser/trunk/opencv/samples/c/box.png?rev=2270
https://code.ros.org/trac/opencv/browser/trunk/opencv/samples/c/box_in_scene.png?rev=2270
결과 이미지는 다음과 같습니다.
사이트의 나머지 부분과 구별하기 어려울 수 있지만 대부분의 이미지는 흰색이므로 개별 이미지가 있어야합니다. 검은 영역은 이미지 데이터가 기록되지 않은 영역입니다.
내 이미지 데이터가 모두 흰색으로 변환되는 이유는 무엇입니까?
해결법
-
==============================
1.이미지 크기가 같아지면 (이미지 처리 결과를 표시하는 일반적인 경우) numpy의 연결을 사용하여 코드를 단순화 할 수 있습니다.
이미지 크기가 같아지면 (이미지 처리 결과를 표시하는 일반적인 경우) numpy의 연결을 사용하여 코드를 단순화 할 수 있습니다.
세로로 쌓으려면 (img1을 img2로) :
vis = np.concatenate((img1, img2), axis=0)
가로로 스택하려면 (img1의 왼쪽에 img1) :
vis = np.concatenate((img1, img2), axis=1)
확인하려면 :
import cv2 import numpy as np img = cv2.imread('img.png') vis = np.concatenate((img1, img2), axis=1) cv2.imwrite('out.png', vis)
-
==============================
2.
import numpy as np, cv2 img1 = cv2.imread(fn1, 0) img2 = cv2.imread(fn2, 0) h1, w1 = img1.shape[:2] h2, w2 = img2.shape[:2] vis = np.zeros((max(h1, h2), w1+w2), np.uint8) vis[:h1, :w1] = img1 vis[:h2, w1:w1+w2] = img2 vis = cv2.cvtColor(vis, cv2.COLOR_GRAY2BGR) cv2.imshow("test", vis) cv2.waitKey()
또는 기존 방식을 선호하는 경우 :
import numpy as np, cv img1 = cv.LoadImage(fn1, 0) img2 = cv.LoadImage(fn2, 0) h1, w1 = img1.height,img1.width h2, w2 = img2.height,img2.width vis = np.zeros((max(h1, h2), w1+w2), np.uint8) vis[:h1, :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()
-
==============================
3.2 개의 컬러 이미지를 하나로 결합하려는 사람들에게는, 이것은 나를 위해 일한 안드레이의 대답에 약간의 모드입니다 :
2 개의 컬러 이미지를 하나로 결합하려는 사람들에게는, 이것은 나를 위해 일한 안드레이의 대답에 약간의 모드입니다 :
img1 = cv2.imread(imageFile1) img2 = cv2.imread(imageFile2) h1, w1 = img1.shape[:2] h2, w2 = img2.shape[:2] #create empty matrix vis = np.zeros((max(h1, h2), w1+w2,3), np.uint8) #combine 2 images vis[:h1, :w1,:3] = img1 vis[:h2, w1:w1+w2,:3] = img2
from https://stackoverflow.com/questions/7589012/combining-two-images-with-opencv by cc-by-sa and MIT license
'PYTHON' 카테고리의 다른 글
[PYTHON] 순환 가져 오기 문을 해결하는 Python 방법? (0) | 2018.10.20 |
---|---|
[PYTHON] 파이썬에서 R 스크립트 실행하기 (0) | 2018.10.20 |
[PYTHON] Python에서 Comet을 이해하는 데 도움이 필요하다 (Django 사용) (0) | 2018.10.20 |
[PYTHON] 무한 중첩 목록에서 정확히 무슨 일이 일어나고 있습니까? (0) | 2018.10.20 |
[PYTHON] 어떻게 파이썬에서 문자열 소문자로? (0) | 2018.10.19 |