1
2
import cv2
import numpy as np
흑백
cv2.IMREAD_GRAYSCALE
- 이미지를 흑백으로 읽어오기
1
2
3
4
5
img = cv2.imread('C:/Users/USER/Desktop/ddoddo.jpg', cv2.IMREAD_GRAYSCALE)
cv2.imshow('img', img)
cv2.waitKey(0)
cv2.destroyAllWindows()
cv2.COLOR_BGR2GRAY
: 흑백으로 바꾸기- 불러온 이미지를 흑백으로 변경
1
2
3
4
5
6
7
8
9
img = cv2.imread('C:/Users/USER/Desktop/ddoddo.jpg')
# 흑백 이미지로 변경
dst = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
cv2.imshow('img', img)
cv2.imshow('gray', dst)
cv2.waitKey(0)
cv2.destroyAllWindows()
흐림
가우시안 블러
- 커널 사이즈 변화에 따른 흐림
cv2.GaussianBlur()
- Kernel Size는 양수, 홀수로 지정해야 한다. -> [3, 3], [5, 5], [7, 7]
- Why? 성능이 좋기 때문에
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
img = cv2.imread('C:/Users/USER/Desktop/img.jpg')
# Kernel Size
# 이미지, 커널 사이즈, 표준편차
kernel_3 = cv2.GaussianBlur(img, (3, 3), 0)
kernel_5 = cv2.GaussianBlur(img, (5, 5), 0)
kernel_7 = cv2.GaussianBlur(img, (7, 7), 0)
cv2.imshow('img', img)
cv2.imshow('kernel_3', kernel_3)
cv2.imshow('kernel_5', kernel_5)
cv2.imshow('kernel_7', kernel_7)
cv2.waitKey(0)
cv2.destroyAllWindows()
- 표준편차 변화에 따른 흐림
- 표준편차에 빠른 변화는 Kernel size를 0으로 두면 된다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
img = cv2.imread('C:/Users/USER/Desktop/img.jpg')
# Kernel Size
# 이미지, 커널 사이즈, 표준편차
sigma_1 = cv2.GaussianBlur(img, (0, 0), 1)
sigma_2 = cv2.GaussianBlur(img, (0, 0), 2)
sigma_3 = cv2.GaussianBlur(img, (0, 0), 3)
cv2.imshow('img', img)
cv2.imshow('sigma_1', sigma_1)
cv2.imshow('sigma_2', sigma_2)
cv2.imshow('sigma_3', sigma_3)
cv2.waitKey(0)
cv2.destroyAllWindows()
원근
- Input의 4개의 지점을 찾아서 변환하여 Output으로
cv2.getPerspectiveTransform()
cv2.warpPerspective()
- 사다리꼴 이미지 펼치기
- 그림판을 통해 [선택]을 누른 후 지점 포인트에 마우스를 갖다대면 위치 확인 가능
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
img = cv2.imread('C:/Users/USER/Desktop/newspaper.jpg')
# 가로 640, 세로 240
width, height = 640, 240
# Input 4개의 지점 (직사각형)
# 그림판을 통해 [선택]을 누른 후 지점 포인트에 마우스를 갖다대면 위치 확인 가능
# 좌상, 우상, 우하, 좌하
src = np.array([[511, 352], [1008, 345], [1122, 584], [455, 594]], dtype=np.float32)
# Output 4개 지점
dst = np.array([[0, 0], [width, 0], [width, height], [0, height]], dtype=np.float32)
matrix = cv2.getPerspectiveTransform(src, dst) # matrix를 얻어옴
result = cv2.warpPerspective(img, matrix, (width, height)) # matrix대로 변환
cv2.imshow('img', img)
cv2.imshow('result', result)
cv2.waitKey(0)
cv2.destroyAllWindows()
- 회전된 이미지 올바르게 세우기
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
img = cv2.imread('C:/Users/USER/Desktop/poker.jpg')
# 가로 640, 세로 240
width, height = 500, 700
# Input 4개의 지점 (직사각형)
# 그림판을 통해 [선택]을 누른 후 지점 포인트에 마우스를 갖다대면 위치 확인 가능
# 좌상, 우상, 우하, 좌하
src = np.array([[702, 143], [1133, 414], [726, 1007], [276, 700]], dtype=np.float32)
# Output 4개 지점
dst = np.array([[0, 0], [width, 0], [width, height], [0, height]], dtype=np.float32)
matrix = cv2.getPerspectiveTransform(src, dst) # matrix를 얻어옴
result = cv2.warpPerspective(img, matrix, (width, height)) # matrix대로 변환
cv2.imshow('img', img)
cv2.imshow('result', result)
cv2.waitKey(0)
cv2.destroyAllWindows()