OpenCV Python 강좌 – Perspective TransformationOpenCV/OpenCV 강좌2023. 10. 12. 20:58
Table of Contents
반응형
warpPerspective 함수를 사용하여 퍼스펙티브 변환(Perspective Transformation)을 구현합니다.
퍼스펙티브 변환에서 원본 이미지의 모든 직선은 출력 이미지에서 직선으로 유지됩니다.
퍼스펙티브 변환 행렬을 찾으려면 입력 이미지의 4점과 대응하는 출력 이미지의 4점이 필요합니다.
getPerspectiveTransform 함수를 사용하면 대응하는 4점 쌍에 대한 변환 행렬을 구할 수 있습니다.
warpPerspective 함수를 사용하여 변환을 실행합니다.
마지막 업데이트 - 2018. 10. 4
다음 순서대로 책의 모서리를 클릭합니다.
클릭한 책 모서리에 빨간점이 찍히게 됩니다.
스페이스바를 누르면 정면에서 바라본 책의 이미지로 변환된 이미지가 보입니다.
테스트에 사용한 원본 이미지와 전체 코드입니다.
import numpy as np import cv2 point_list = [] count = 0 def mouse_callback(event, x, y, flags, param): global point_list, count, img_original # 마우스 왼쪽 버튼 누를 때마다 좌표를 리스트에 저장 if event == cv2.EVENT_LBUTTONDOWN: print("(%d, %d)" % (x, y)) point_list.append((x, y)) print(point_list) cv2.circle(img_original, (x, y), 3, (0, 0, 255), -1) cv2.namedWindow('original') cv2.setMouseCallback('original', mouse_callback) # 원본 이미지 img_original = cv2.imread('test3.png') while(True): cv2.imshow("original", img_original) height, width = img_original.shape[:2] if cv2.waitKey(1)&0xFF == 32: # spacebar를 누르면 루프에서 빠져나옵니다. break # 좌표 순서 - 상단왼쪽 끝, 상단오른쪽 끝, 하단왼쪽 끝, 하단오른쪽 끝 pts1 = np.float32([list(point_list[0]),list(point_list[1]),list(point_list[2]),list(point_list[3])]) pts2 = np.float32([[0,0],[width,0],[0,height],[width,height]]) print(pts1) print(pts2) M = cv2.getPerspectiveTransform(pts1,pts2) img_result = cv2.warpPerspective(img_original, M, (width,height)) cv2.imshow("result1", img_result) cv2.waitKey(0) cv2.destroyAllWindows() |
반응형
'OpenCV > OpenCV 강좌' 카테고리의 다른 글
이미지에서 텍스트 영역을 찾아주는 OpenCV Python의 MSER 예제 (0) | 2023.10.13 |
---|---|
OpenCV Python - webcam에서 가져온 영상을 mp4로 저장하는 예제 (0) | 2023.10.13 |
OpenCV Python 강좌 – 이미지 이동 / 회전 하기 (0) | 2023.10.12 |
OpenCV Python 강좌 – 이미지 확대/축소 resize 함수 (0) | 2023.10.12 |
OpenCV에서 cudacodec 사용하도록 빌드하기 (0) | 2023.10.11 |