반응형

OpenCV 에서는 이미지를 넘파이 배열 형식으로 읽어올 수 있기 때문에 concatenate, vstack, hstack 과 같은 방법을 사용해서 해결 할 수 있다.

 

주의 해야할 점은

1) 가로 또는 세로로 붙이는 2개의 이미지의 이미지 사이즈가 같아야한다. (차원이 달라서 연산 불가)

2) 같은 이미지를 하나는 컬러, 하나는 흑백으로 보여주고 싶을 때, 두 이미지는 channel 수가 다르다 (컬러 : 3 / 흑백 : 1). 여기도 위와 같은 이유로 연산이 불가능 하기 때문에 gray scale로 변환한 이미지를 3 채널로 변경하는 작업을 해줘야 한다.

 

import cv2
import numpy as np

image = cv2.imread('28cda5f26af6c63f1936f0dc7e4ce003.jpg')

# cv2.resize(frame, (0, 0), None, ratio, ratio)
# output image size; if it equals zero, it is computed as:
# dsize = Size(round(fx*src.cols), round(fy*src.rows))
image = cv2.resize(image, (0, 0), None, .5, .5)

grey = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY) # 흑백 변환
grey_3_channel = cv2.cvtColor(grey, cv2.COLOR_GRAY2BGR) # 흑백 사진을 3 채널로 변경

# 가로로 붙이기 
# 둘 중 하나 사용 가능
numpy_horizontal = np.hstack((image, grey_3_channel))
numpy_horizontal_concat = np.concatenate((image, grey_3_channel), axis=1)

# 세로로 붙이기
# 둘 중 하나 사용 가능
numpy_vertical = np.vstack((image, grey_3_channel))
numpy_vertical_concat = np.concatenate((image, grey_3_channel), axis=0)

cv2.imshow('Numpy Horizontal Concat', numpy_horizontal)
cv2.imshow('Numpy Vertical Concat', numpy_vertical)

cv2.waitKey()

 

 

Horizontal Concat 예시

 

Vertical Concat 예시

반응형