1.단순 회전
cv.getRotationMatrix2D( (센터 좌표), 회전 각도, 이미지 크기 )
import cv2 as cv
img = cv.imread('hamster.jpg')
img_h, img_w = img.shape[:2]
rotate = cv.getRotationMatrix2D((img_w/2, img_h/2), 45, 1)
img_rotate = cv.warpAffine(img, rotate, (img_w, img_h))
cv.imshow("ass", img_rotate)
cv.waitKey(0)
2. 크기 조정
cv.resize 사용
1) 확대
- 이미지 확대시에는 INTER_CUBIC, INTER_LINEAR 근데 CUBIC은 느리다
2) 축소
- 축소할때는 INTER_AREA 권장
3. 이미지 이동
WarpAffine 함수 사용
이동행렬을 만들어서 변환시키는 것임
ex) [1,0,100] [0,1,50] -> x방향(오른쪽) 으로 100, y 방향(아래) 로 50 이동하는 행렬
4. 아핀 변환
그림과 같이 세점을 대응시켜야한다
-> 정말 간단하게 생각하면, 모서리 좌표들을 찍어두고, 그 좌표의 픽셀 위치를 바꿔주면 된다.
cv.getAffineTransform(기존의 세개 좌표, 변경된 세개의 좌표)
ex) 예제
-> 원하는 좌표를 3개 찍고, 변환 후 getAffineTransform 함수 사용
import cv2 as cv
import numpy as np
point_list = []
def mouse_callback(event, x, y, flags, param):
# 좌표를 클릭으로 찾기
if event == cv.EVENT_LBUTTONDOWN:
print(" (%d,%d) " % (x, y))
point_list.append((x, y))
cv.circle(img, (x, y), 2, (100, 150, 210), -1)
cv.namedWindow('test')
cv.setMouseCallback('test', mouse_callback)
img = cv.imread('HBW.jpg')
while True:
cv.imshow('test', img)
# 좌표 다 찍으면, 루프 나오고 변환 작동
if cv.waitKey(0) == 27:
break
h, w = img.shape[:2]
points_1 = np.float32([point_list[0], point_list[1], point_list[2]])
points_2 = np.float32([point_list[0], point_list[1], point_list[2]])
# 원하는 변환은 이 위치에
# 두번째 포인터에 y좌표가 +100
points_2[1][1] += 100
M = cv.getAffineTransform(points_1, points_2)
img_result = cv.warpAffine(img, M, (w, h))
cv.imshow('result', img_result)
cv.waitKey(0)
5. 퍼스펙티브 변환
: 간단히 말해, 3차원 공간에 있는 물체를 2차원 평면에 올려놓는 것
: 중요하므로 따로 쓰겠음
'OpenCV > Python' 카테고리의 다른 글
원근(퍼스펙티브) 변환 (0) | 2021.06.13 |
---|---|
영역 지정 (내가 헷갈려서 정리..) (0) | 2021.06.13 |
ROI - 3 응용하기2 ( 평균 색 추출하기) (0) | 2021.06.12 |
ROI -2 응용하기 (0) | 2021.06.11 |
ROI -1 관심영역 설정 (0) | 2021.06.11 |