728x90
반응형
SMALL
1. 영상의 화소처리
- 영상의 특정 좌표 픽셀값으 변경하여 출력 영상의 좌표 픽셀을 설정하는 모든 연산
1-1. 밝기 조절
- 영상을 전체적으로 밝게하거나 어둡게 하는 연산
- cv2.add(첫번째 영상, 두번째 영상)
- cv2.subtract(첫번째 영상, 두번째 영상)
- cv2.multiply(첫번째 영상, 두번째 영상)
- cv2.divide(첫번째 영상, 두번째 영상)
import cv2
src1 = cv2.imread('dog.bmp', cv2.IMREAD_GRAYSCALE)
src2 = cv2.imread('dog.bmp')
# src1, src2의 픽셀값에 100씩 더해줌
dst1 = cv2.add(src1, 100)
print('dst1: ', dst1)
print('---------------')
dst2 = cv2.add(src2, (100, 100, 100, 0)) # 컬러값을 나타내는 bmp파일이기 때문에 4채널
dst3 = cv2.subtract(src1, 100)
print(dst3)
print('---------------')
dst4 = cv2.multiply(src1, 10)
print(dst4)
print('---------------')
dst5 = cv2.divide(src1, 10)
print(dst5)
print('---------------')
>>>
dst1: [[177 191 198 ... 139 139 139]
[171 181 193 ... 134 131 128]
[163 163 171 ... 135 129 124]
...
[188 193 195 ... 222 229 219]
[179 187 191 ... 221 215 220]
[170 174 181 ... 220 232 215]]
---------------
[[ 0 0 0 ... 0 0 0]
[ 0 0 0 ... 0 0 0]
[ 0 0 0 ... 0 0 0]
...
[ 0 0 0 ... 22 29 19]
[ 0 0 0 ... 21 15 20]
[ 0 0 0 ... 20 32 15]]
---------------
[[255 255 255 ... 255 255 255]
[255 255 255 ... 255 255 255]
[255 255 255 ... 255 255 240]
...
[255 255 255 ... 255 255 255]
[255 255 255 ... 255 255 255]
[255 255 255 ... 255 255 255]]
---------------
[[ 8 9 10 ... 4 4 4]
[ 7 8 9 ... 3 3 3]
[ 6 6 7 ... 4 3 2]
...
[ 9 9 10 ... 12 13 12]
[ 8 9 9 ... 12 12 12]
[ 7 7 8 ... 12 13 12]]
---------------
cv2.imshow('src1', src1)
cv2.imshow('src2', src2)
cv2.imshow('dst1', dst1)
cv2.imshow('dst2', dst2)
cv2.imshow('dst5', dst5)
cv2.waitKey()
✅ 같은 크기의 두 영상을 add 연산하기
import cv2
import matplotlib.pyplot as plt
# 같은 크기의 두 이미지를 add 연산해보기
src1 = cv2.imread('cat1.jpg')
src2 = cv2.imread('cat2.jpg')
dst1 = src1 + src2 # 0 ~ 255 범위가 아닌 결과가 있음
dst2 = cv2.add(src1, src2) # 0 ~ 255 범위로 연산
img = {'src1': src1, 'src2': src2, 'dst1': dst1, 'dst2':dst2}
for i, (k, v) in enumerate(img.items()):
plt.subplot(2,2,i+1)
plt.imshow(v[:, :, ::-1]) # ::-1을 사용하면 BGR(파랑, 녹색, 빨강)로 색상 채널이 바뀜(matplotlib)
plt.title(k)
plt.show()
1-2. 가중치 합(weighted sum)
- 두 영상의 같은 위치에 존재하는 픽셀값에 대하여 가중합을 계산해서 결과 영상의 픽셀값으로 설정
- cv2.addWeighted(첫번째 영상, 알파값, 두번째 영상, 감마값)
- 알파값: 첫번째 영상에 지정할 가중치, 가중치의 합은 1
- 감마값: 연산 결과에 가감할 상수, 기본값은 0
✅ 크기가 같은 두 영상을 weighted sum
import cv2
import matplotlib.pyplot as plt
import numpy as np
src1 = cv2.imread('cat1.jpg')
src2 = cv2.imread('cat2.jpg')
alpha = 0.7
dst1 = src1 * alpha + src2 * (1-alpha)
dst1 = dst1.astype(np.uint8)
dst2 = cv2.addWeighted(src1, alpha, src2, (1-alpha), 0) # 0 ~ 255 범위로 연산
cv2.imshow('dst1', dst1)
cv2.imshow('dst2', dst2)
cv2.waitKey()
1-3. 두 영상의 차이(absdiff)
- 두 영상의 픽셀 값을 빼면 음수가 나올 수 있는데, 음수에 절대값을 취한 값
- cv2.absdiff(첫번째 영상, 두번째 영상)
✅ 두 영상의 여러 연산을 matplotlib으로 나타내기
import cv2
import numpy as np
import matplotlib.pyplot as plt
# square.bmp (256*256)
# 같은 크기의 이미지와 연산
# add, addWeighted, subtract, absdiff
# matplotlib의 subplot을 이용해서 이미지 비교
src1 = cv2.imread('cat3.jpg')
src2 = cv2.imread('square.bmp')
dst1 = cv2.add(src1, src2)
dst2 = cv2.addWeighted(src1, 0.5, src2,0.5,0.0) # 가중합
dst3 = cv2.subtract(src1, src2) # 빼기 연산
dst4 = cv2.absdiff(src1, src2)
img = {'dst1': dst1, 'dst2': dst2, 'dst3': dst3, 'dst4':dst4}
plt.figure(figsize=(9,8))
for i, (k, v) in enumerate(img.items()):
plt.subplot(2,2,i+1)
plt.imshow(v[:, :, ::-1]) # ::-1을 사용하면 BGR(파랑, 녹색, 빨강)로 색상 채널이 바뀜(matplotlib)
plt.title(k)
plt.show()
728x90
반응형
LIST
'Python > Computer Vision' 카테고리의 다른 글
[파이썬, Python] OpenCV - 히스토그램과 영상 균등화, 정규화 (0) | 2023.08.25 |
---|---|
[파이썬, Python] OpenCV - 컬러 영상과 색상 정보 (0) | 2023.08.24 |
[파이썬, Python] OpenCV - 키보드, 마우스 이벤트 (0) | 2023.08.24 |
[파이썬, Python] OpenCV - 동영상 처리하기! (0) | 2023.08.23 |
[파이썬, Python] OpenCV - 영상에 도형 그리기! (0) | 2023.08.04 |