Home [CV] 이미지 변형2
Post
Cancel

[CV] 이미지 변형2

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()

image

  • 회전된 이미지 올바르게 세우기
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()

image

This post is licensed under CC BY 4.0 by the author.