이것도 알아야 하네?

[Python] OpenCV 예제 따라하기—1. 이미지 합성 본문

프로그래밍/이미지 처리

[Python] OpenCV 예제 따라하기—1. 이미지 합성

아직 갈 길이 먼 사람 2021. 11. 7. 18:13
728x90

지난 시간까지 이미지를 읽고, 보고, 저장하는 방법을 배웠습니다.
해당 예제를 확인하고 싶다면
⬇⬇⬇⬇⬇⬇

 

OpenCV 예제 따라하기 시리즈

> 0. 이미지 읽고 쓰기


Goal

이번 시간에는 OpenCV 모듈을 이용하여, 두 이미지를 합성하는 방법을 배웁니다.

 

1. 이미지 합성

cv2.add() 함수를 이용하여 이미지 파일를 합성합니다. 중요한 점은 이미지 픽셀은 0~255 사이의 값을 가지는 특성에 따라, 두 이미지 픽셀 값을 덧셈 연산 후 255 값을 넘는 값에 대해서 모두 255 값을 가지게 합니다. 그러므로 두 numpy.ndarray 타입의 객체 행렬을 단순히 덧셈 연산한 것과는 결과가 달라집니다. 만약, numpy.ndarray타입 연산을 가지고 동일한 결과를 가지게 하고 싶다면, 이미지 객체 행렬 dtype을 float으로 변경한 후 덧셈 연산을 진행하고 numpy.clip함수를 이용하여 값을 한정시킬 수 있습니다. dtype을 float으로 변경하지 않는 경우 overflow 현상이 발생하여 modulo 연산이 발생할 수 있습니다.

cv2.add(imageObject1, imageObject2)

Returns
합성된 image객체 행렬을 numpy.ndarray 타입으로 반환합니다.

Parameters

  • imageObject1/imageObject2 (Required): 합치고 싶은 두 이미지 객체행렬로 순서 상관없이 cv2.imread()의 반환값을 입력하면 됩니다.

> Code

import cv2 

img1 = cv2.imread('/file_load_path/FILE_NAME1.jpg') 
img2 = cv2.imread('/file_load_path/FILE_NAME2.jpg') 
result = cv2.add(img1, img2)

> Result

img1 img2 result

합성이 이상하게 진행되어 보이는 이유는 앞서 언급했다시피 덧셈 연산 시 255 넘는 값에 대해서 모두 255으로 치환되기 때문입니다. 두 이미지 모두 밝은 이미지로 높은 픽셀 값들을 가지고 있었기 때문에, 합산된 이미지의 픽셀은 대부분 255(흰 색)에 가까워 희게 보이게 됩니다.

728x90
Comments