본문 바로가기
Development/OpenCV

[OpenCV] 이미지 hstack으로 붙이기

by shuka 2021. 10. 21.
728x90
728x90

hstack을 사용하여 이미지 붙이기

딥러닝에서 여러 모델을 학습 하고 각 모델의 성능을 보기 위해서는 수치만 출력해서 결과를 확인할 수도 있지만 보통은 눈에 잘 보이는 형태로 만들어서 결과를 확인하기 위해 이미지에 직접 그려보면서 확인하는 경우도 많다.

 

하지만 여러 모델에 대해 이미지를 보면서 비교하기 위해 하나하나 넘기기엔 귀찮아서 numpy의 stack함수를 이용해서 붙여버렸다.

 

각각의 모델 결과를 뽑은 이미지들이 저장되어 있는 폴더를 folder_name_list에 넣어 주고 결과를 확인하기 위한 이미지들의 이름은 같으니까 하나의 폴더에 대해 들어있는 이미지의 이름들을 image_list에 넣어준다.

import cv2
import os
import numpy as np

folder_name_list = ['mobilenetv1', 'resnet18', 'resnet34', 'resnet50']
print(folder_name_list)

save_path = 'concat_result'

image_list = os.listdir(folder_name_list[0])

 

 

각각의 폴더 이름과 이미지 이름을 join해주고 imread 해준 다음 images list에 append 시켜준다. 

for image in image_list:
	save_image_path = os.path.join(save_path, image)

	images = []
	for folder in folder_name_list:
		image_path = os.path.join(folder, image)
		print(image_path)
		img = cv2.imread(image_path)
		images.append(img)	

		cv2.putText(img, folder, (50, 50),
				cv2.FONT_HERSHEY_DUPLEX, 2, (0, 0, 255))
                
	concat_image = np.hstack((images))
	cv2.imwrite(save_image_path, concat_image)

 

 

그리고, hstack을 사용하고 imwrite해주면 다음 그림과 같이 붙인 이미지가 저장된다.

 

hstack을 사용하면 다음과 같이 가로(width)로 길게 저장이 되고, 만약 세로(height)로 긴 이미지로 붙이고 싶다면 vstack을 사용하면 된다.

 

 

전체 코드

이래의 코드는 각 폴더안에 있는 이미지를 붙여서 저장하는 전체 코드를 보여준다.

import cv2
import os
import numpy as np

folder_name_list = ['mobilenetv1', 'resnet18', 'resnet34', 'resnet50']
print(folder_name_list)

save_path = 'concat_result'

image_list = os.listdir(folder_name_list[0])
for image in image_list:
	save_image_path = os.path.join(save_path, image)

	images = []
	for folder in folder_name_list:
		image_path = os.path.join(folder, image)
		print(image_path)
		img = cv2.imread(image_path)
		images.append(img)	

		cv2.putText(img, folder, (50, 50),
				cv2.FONT_HERSHEY_DUPLEX, 2, (0, 0, 255))
                
	concat_image = np.hstack((images))
	cv2.imwrite(save_image_path, concat_image)

 

728x90
반응형

댓글