예제 영상 파일
예제 파일은 아무 이미지 파일로 사용하셔도 됩니다. 저는 귀여운 강아지 초코로 진행해볼 예정입니다.
파일을 다운받으셔서 같은 환경(실행하는 파이썬 디렉터리)에 저장을 시켜 둡니다.
(만약 다른 곳에 있다면 경로를 아셔야 합니다)
이미지 변환 함수
- flip
flip 함수는 영상에 회전을 줄 때, 사용합니다.
flip 코드가 0 이면, 상하 방향 대칭
img = cv2.imread('choco.jpg')
img = cv2.flip(img, flipCode=0)
flip 코드가 1이면 좌우 방향으로 대칭이 됩니다.
img = cv2.imread('choco.jpg')
flp_img = cv2.flip(img, flipCode=1)
cv2.imshow('image', flp_img)
cv2.waitKey()
(Tip, flip -1을 넣으면 좌우 및 상하 대칭)
- getRotationMatrix2D
getRotationMatrix2D 함수는 중심점(X좌표, Y좌표), 각도, 스케일을 설정하여 회전시킬 수 있습니다.
(함수 사용 예시 : cv2.getRotationMatrix2D(중심점, 각도, 스케일))
중심점 : 튜플 형태로 사진의 기준점
각도 : 회전할 각도
스케일 : 이미지 확대 비율
실행 결과값은, 변환된 행렬 값으로 나타나 집니다.
- wrapAffine
getRotationMatrix2D는 돌려만 주는 함수이기 때문에, warpAffine함수를 통해서 다시 정의해줍니다.
warpAffine은 이미지를 변환한 행렬 값을 바꿔주는 함수입니다.
(함수 사용 예시 : cv2.warpAffine(원본 이미지, 변환 행렬, (width, height)))
다음 코드는 이미지 중심으로부터 90도를 회전한 후, wrapAffine함수를 통해서 이미지를 나타낸 것입니다.
img = cv2.imread('choco.jpg')
height, width = img.shape[:2]
print(height, width)
rotate = cv2.getRotationMatrix2D((width/2, height/2), 90, 1)
rotate_img = cv2.warpAffine(img, rotate, (width, height))
cv2.imshow('image', rotate_img)
cv2.waitKey()
(tip, img.shape()를 통해서 이미지 크기를 알아낸 후, 2로 나누면 중심점을 쉽게 잡을 수 있습니다.)
- resize
이미지 크기를 조절할 때, 사용합니다. 두 가지 방법이 있습니다.
하나는, 원하는 사이즈로 변환을 할 경우입니다.
(함수 예시 : cv2.resize(원본 이미지, dsize(변환할 너비, 변환할 높이) )
img = cv2.imread('choco.jpg')
dist_img = cv2.resize(img, dsize=(640, 480))
cv2.imshow('image', dist_img)
cv2.waitKey()
두 번째로는, 원하는 비율로 변환할 경우입니다.
(함수 예시 : cv2.resize(원본 이미지, dsize(0, 0), fx=가로축 비율, fx 세로축 비율 )
img = cv2.imread('choco.jpg')
rate_img = cv2.resize(img, dsize=(0, 0), fx=0.5, fy=0.5)
cv2.imshow('image2', rate_img)
cv2.waitKey()
(Tip, 비율 사용 시, dsize의 값이 있을 경우, 해당 값에서의 비율로 반영이 됩니다.)
또한 추가적으로, interpolation이라는 옵션이 있는데, 보통 cv2.INTER_LINEAR(쌍 선형 보간법)을 주로 사용하고, default 값입니다. 현재 코드에서도 interpolation 옵션을 사용하지 않았기 때문에 INTER_LINEAR이 자동 적용되었습니다.
속성에 종류로는
속성 | 의미 | 주로 사용 하는 경우 |
cv2.INTER_NEAREST | 이웃 보간법 | |
cv2.INTER_LINEAR | 쌍 선형 보간법 | 기본 (이미지 확대) |
cv2.INTER_LINEAR_EXACT | 비트 쌍 선형 보간법 | |
cv2.INTER_CUBIC | 바이큐빅 보간법 | 이미지를 확대할 경우 (느리지만 확대시 깨지는 것 방지) |
cv2.INTER_AREA | 영역 보간법 | 이미지를 축소할 경우 |
cv2.INTER_LANCZOS4 | Lanczos 보간법 | 이미지를 확대할 경우 (정말 느리지만 확대시 깨지는 것 방지) |
사용 예시 :
img = cv2.imread('choco.jpg')
rate_img = cv2.resize(src, dsize=(0, 0), fx=0.5, fy=0.5, interpolation=cv2.INTER_LINEAR)
cv2.imshow('image2', rate_img)
cv2.waitKey()
'AI > OpenCV-실습' 카테고리의 다른 글
OpenCV - 실습 (0) | 2020.09.03 |
---|---|
OpenCV - 영상(이미지) 다루기(9)_(이미지 변환 응용) (0) | 2020.09.03 |
OpenCV - 영상(이미지) 다루기(7)_(트랙바 사용) (0) | 2020.09.03 |
OpenCV - 영상(이미지) 다루기(6)_(마우스 함수) (1) | 2020.09.02 |
OpenCV - 영상(이미지) 다루기(5)_(그리기 함수) (0) | 2020.09.02 |