4. 이미지 연산

 

4.1 이미지 더하기


4.1.1 modulo 연산


img = img1 + img2

두개의 이미지를 각각의 픽셀 단위로 덧셈을 하여 255보다 큰 경우 256으로 나눈 나머지를 픽셀 값으로 설정 합니다. ( 250 + 7 = 257/256 -> 1)

더하는 이미지는 사이즈가 동일해야 하며 사이즈가 같지 않으면 아래와 같은 오류가 발생 합니다.


 ValueError: operands could not be broadcast together with shapes (277,350,3) (213,350,3) 


4.1.2 Saturation 연산


cv2.add() 함수를 이용하여 두개의 이미지를 각각의 픽셀 단위로 덧셈을 한 후 255보다 큰 경우 255를 픽셀 값으로 설정 합니다. (250 + 7 = 257 -> 255)

 

cv2.add(src1, src2[, dst[, mask[, dtype]]]) → dst

 

parameter

내용

src1

이미지 파일

src2

이미지 파일

dst

결과 파일

mask

영역 지정

dtype

output depth

 

이미지를 더하는 예제


import numpy as np

import cv2

 

img1 = 'F:/Python/images/image001.png'

img2 = 'F:/Python/images/image002.png'

 

# image read

imread1 = cv2.imread(img1, cv2.IMREAD_COLOR)

imread2 = cv2.imread(img2, cv2.IMREAD_COLOR)

 

# image add

img_plus = imread1 + imread2

img_add = cv2.add(imread1, imread2)

 

# image show

cv2.imshow('image + ', img_plus)

cv2.imshow('image add', img_add)

 

cv2.waitKey(0)

cv2.destroyAllWindows()



두개의 이미지를 이용하여 연산을 진행 합니다.


image001.png

opencv_bit_add


image002.png

opencv_bit_add


- modulo 연산


메뚜기 사진의 배경이 거의 없어서 배경을 제외 하고는 물체 확인이 어렵습니다.


opencv_bit_add


- Saturation 연산


이것도 원본 사진을 보지 않은 경우에는 예측이 어렵습니다.


opencv_bit_add


4.3 이미지 Blending

 

cv2.addWeighted()

두개의 이미지에 각각의 가중치를 조절하여 덧셈하는 방법입니다가중치의 값이 큰 이미지가 좀더 선명하게 나타 납니다.

 

cv2.addWeighted(src1, alpha, src2, beta, gamma[, dst[, dtype]]) → dst


parameter

내용

src1

이미지1

alpha

이미지1 가중치

src2

이미지2

beta

이미지2 가중치

gamma

각 덧셈에 추가하는 값

dst

결과 이미지

dtype

depth

 

dst[i] = saturate(src1[i]*alpha + src2[i]*beta + gamma)


import numpy as np

import cv2

 

img1 = 'F:/Python/images/image001.png'

img2 = 'F:/Python/images/image002.png'

 

# image read

imread1 = cv2.imread(img1, cv2.IMREAD_COLOR)

imread2 = cv2.imread(img2, cv2.IMREAD_COLOR)

 

def weight (x):

    pass

 

cv2.namedWindow('image')

cv2.createTrackbar('Weight', 'image', 0, 100, weight)

 

while True:

    weight = cv2.getTrackbarPos('Weight','image')

    addWeight = cv2.addWeighted(imread1,float(100-weight) * 0.01, imread2,float(weight) * 0.01,0)

    cv2.imshow('image', addWeight)

 

    if cv2.waitKey(1) &0xFF == 27:

        break;

 

cv2.waitKey(0)

cv2.destroyAllWindows()


가중치가 높은 이미지가 선명하게 보이게 됩니다우리가 흔하게 볼 수 있는 은은한 장면 전환과 같습니다.


opencv_bit_add




+ Recent posts