일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
- programmers
- Computer Vision
- 파이썬
- pytorch
- 논문 리뷰
- Self-supervised
- 옵티마이저
- ViT
- Python
- 코딩테스트
- 논문구현
- Segmentation
- Semantic Segmentation
- 딥러닝
- 논문
- 프로그래머스
- optimizer
- 파이토치
- Convolution
- Ai
- cnn
- transformer
- 코드구현
- 알고리즘
- 인공지능
- 논문리뷰
- Paper Review
- 머신러닝
- opencv
- object detection
- Today
- Total
Attention please
[OpenCV] OpenCV로 이미지 전처리 하기 본문
OpenCV를 이용하여 읽어온 이미지를 다양하게 전처리 할 수 있다. 다음은 원본 이미지이다.
크기 조정
이미지 size를 조정하는데 총 2가지 방법이 존재한다.
- 직접 size 설정
- 비율로 size 조절
먼저 고정된 size인 (400, 500)로 resize를 하였다.
import cv2
img = cv2.imread('cat_img.jpg')
dst = cv2.resize(img, (400, 500))
cv2.imshow('img', img)
cv2.imshow('resize', dst)
cv2.waitKey(0)
cv2.destroyAllWindows()
다음으로 설정한 비율에 맞게 resize를 하였다.
dst = cv2.resize(img, None, fx=0.5, fy=0.5)
위와 같이 이미지의 size를 축소하거나 확대하면 픽셀이 겹치거나 비어버리는 문제가 생긴다. 이를 해결하기 위해 보간법이라는 것이 존재하며, opencv 라이브러리에서도 보간법을 지원하고 있다.
- cv2.INTER_AREA : 크기 줄일 때 사용
- cv2.INTER_CUBIC : 크기 늘릴 때 사용 (속도 느림, 퀄리티 좋음)
- cv2.INTER_LINEAR : 크기 늘릴 때 사용 (기본값)
사용법은 다음과 같이 cv2.resize() 함수의 파라미터 interpolation 을 설정해주면 된다.
cv2.resize(img, None, fx=0.5, fy=0.5, interpolation=cv2.INTER_AREA)
이미지 자르기
이미지를 자르는 것은 slicing을 통해 쉽게 할 수 있다. 기존의 이미지에서 원하는 영역만큼 slicing을 하여 새롭게 잘라낸 이미지를 만든다.
crop = img[100:200, 200:400]
세로는 100~200, 가로는 300~400 의 영역만큼 이미지를 새롭게 출력한다.
이미지 대칭
opencv 라이브러리는 cv2.flip() 과 같이 이미지를 대칭시켜주는 함수가 존재한다.
먼저 좌우를 대칭시키기 위해서는 flipCode가 0 이상이도록 입력한다.
flip_horizontal = cv2.flip(img, 1) # flipCode > 0 : 좌우 대칭 Horizontal
상하 대칭시키기 위해서는 flipCode가 0이도록 입력하면 된다.
flip_vertical = cv2.flip(img, 0) # flipCode == 0 : 상하 대칭 Vertical
상하좌우 모두 대칭시키기 위해서는 flipCode를 0 보다 작은 값으로 설정해준다.
flip_both = cv2.flip(img, -1) # flipCode < 0 : 상하좌우 대칭 Vertical
이미지 회전
cv2.rotate() 함수는 이미지를 회전시킬 때 사용된다.
먼저 시계방향으로 90도 회전하기 위해 파라미터 값을 cv2.ROTATE_90_CLOCKWISE 로 준다.
rotate_90 = cv2.rotate(img, cv2.ROTATE_90_CLOCKWISE)
다음으로 시계방향 180도 회전하기 위해 파라미터 값을 cv2.ROTATE_180 으로 준다.
rotate_180 = cv2.rotate(img, cv2.ROTATE_180)
다음으로 시계 반대 방향으로 90도 회전하기 위해 파라미터 값을 cv2.ROTATE_90_COUNTERCLOCKWISE 로 준다.
rotate_270 = cv2.rotate(img, cv2.ROTATE_90_COUNTERCLOCKWISE)
흑백 이미지 변형
cv2.imread 할 때 흑백으로 불러오는 것이 아닌 불러온 이미지를 흑백으로 변경할 때는 cv2.cvtColot() 함수를 사용하여야 한다.
dst = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
이미지 흐림 효과 주기
이미지의 흐린 효과를 주는데는 총 2가지 방법이 존재한다. 그 중 먼저 kernel 사이즈에 따라 흐림의 정도를 받는 cv2.GaussianBlur() 함수를 사용할 수 있다.
총 커널의 크기는 (3,3), (7,7) 이다.
kernel_3 = cv2.GaussianBlur(img, (3,3), 0)
kernel_7 = cv2.GaussianBlur(img, (7,7), 0)
kernel의 크기가 더 큰 오른쪽 이미지가 더 흐리게 보이는 것을 확인 할 수 있다.
다음으로는 표준편차의 변화에 따라 흐림의 정도를 표현할 수 있다. 똑같이 cv2.GaussianBlur() 함수를 사용하지만 kernel의 크기는 (0,0)으로 통일하며, 표준편차만 변화를 준다.
sigma_1 = cv2.GaussianBlur(img, (0,0), 1)
sigma_3 = cv2.GaussianBlur(img, (0,0), 3)
표준편차가 1인 왼쪽 그림에 비해 표준편차가 3인 오른쪽 그림이 더 흐리게 보이는 것을 확인할 수 있다.
'OpenCV' 카테고리의 다른 글
[OpenCV] OpenCV로 도형 그리기(직선, 원, 사각형, 다각형) (0) | 2023.01.09 |
---|---|
[OpenCV] OpenCV를 이용한 동영상 출력 및 저장 (0) | 2023.01.08 |
[OpenCV] OpenCV를 이용한 이미지 출력 및 저장 (0) | 2023.01.08 |
[OpenCV] OpenCV 설치 시 Building wheels for collected packages: opencv-python Building wheel for opencv-python (PEP 517) ... | 문제 발생 (0) | 2023.01.08 |