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
image002.png
- modulo 연산
메뚜기 사진의 배경이 거의 없어서 배경을 제외 하고는 물체 확인이 어렵습니다.
- Saturation 연산
이것도 원본 사진을 보지 않은 경우에는 예측이 어렵습니다.
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() |
가중치가 높은 이미지가 선명하게 보이게 됩니다. 우리가 흔하게 볼 수 있는 은은한 장면 전환과 같습니다.
'Tensorflow > OpenCV' 카테고리의 다른 글
OpenCV 5. 임계처리 (이진화) (Python) (0) | 2019.04.07 |
---|---|
OpenCV 4. 이미지 비트 연산 (Python) (0) | 2019.04.06 |
OpenCV 3. 비디오 입력 출력 (Python) (2) | 2019.04.04 |
OpenCV 2. 이미지 입력 출력 (Python) (0) | 2019.04.02 |
OpenCV 1. 도형 그리기 문자 (Python) (5) | 2019.04.01 |