배경
사진을 찍다보면 정확하게 직사각형 기준으로 찍는건 사실상 어렵다고 볼 수 있는데,
이를 기하학적 변환하는 프로그래밍을 통해 충분히 이미지를 변화할 수 있다.
OCR을 하고자 하는 경우에 이런식으로 처리하면 OCR 성공률을 높일 수 있다는 점에서 아래 예제는 자주 쓰일 것으로 예상된다.
그냥.. 영수증 이쁘게 펴주는걸 개발하고 싶어 검색하다가 추후에 쓰일 것 같아 정리한다
준비
점심시간에 자주 가는 싸다김밥 메뉴판을 가지고 진행해본다.
위 사진에서 메뉴판에 각 꼭지점 좌표를 구한다.
그냥 그림판에 로드해서 나는 구했다.
import cv2
import numpy as np
# 이미지 파일 경로
img_path = '/Users/god-logger/Downloads/IMG_7319.png'
# 이미지 로드
img = cv2.imread(img_path)
# 이미지의 가로 세로 길이
height, width, _ = img.shape
# 변환 전 4개의 점
pts1 = np.float32([[737,450], [1290,685], [70,1162], [712,1610]])
# 변환 후 4개의 점
pts2 = np.float32([[0, 0], [width, 0], [0, height], [width, height]])
# 변환 행렬 계산
M = cv2.getPerspectiveTransform(pts1, pts2)
# 이미지 변환
result = cv2.warpPerspective(img, M, (width, height))
# 결과 이미지 출력
cv2.imshow('Result', result)
cv2.waitKey(0)
cv2.destroyAllWindows()
산출물
왼쪽 상단이 뿌연건... 초점을 제대로 맞추지 않고 대충찍었기 때문일 것이다.
사진만 잘 찍는다면 더 이쁘게 뽑을 수 있었을 듯 하다.
반응형
'학습' 카테고리의 다른 글
[Python] 프레임 이미지 이용 동영상 비디오 만들기 (0) | 2024.02.08 |
---|---|
키즈노트 일괄 다운로드 방법 ( 사진, 알림노트 ) (1) | 2024.01.28 |
좌표 배열 최외곽 선 따기 ( feat. convex hull 알고리즘 ) (0) | 2023.09.05 |