이미지 투시 변환 소개
컴퓨터 비전 분야에서 다양한 기하학적 변환을 수행할 때 투시 변환은 매우 중요한 기술입니다. 투시 변환은 3차원 공간에서의 시점 변화를 모사하여 같은 물체를 다른 각도에서 보는 효과를 생성합니다. 본 문서에서는 OpenCV 라이브러리를 사용하여 Python에서 이미지를 투시 변환하는 방법을详细介绍합니다.
개발 환경 설정
작업을 시작하기 전에 OpenCV 라이브러리를 설치해야 합니다. 설치가 필요 없는 경우 다음 명령어를 사용합니다:
pip install opencv-python
코드 예제 및 설명
import cv2
import numpy as np
def process_image():
"""
이미지를 투시 변환합니다.
"""
# 이미지 읽기
img = cv2.imread('./resources/card.jpeg')
print(type(img))
print(img.shape)
# 목표 너비와 높이
target_width = 300
target_height = 200
# 원본 이미지의 4개 점 좌표
src_points = np.float32([
[94, 302],
[205, 243],
[152, 369],
[265, 300]
])
# 목적 이미지의 4개 점 좌표
dst_points = np.float32([
[0, 0],
[target_width, 0],
[0, target_height],
[target_width, target_height]
])
# 투시 변환 매트릭스 계산
transform_matrix = cv2.getPerspectiveTransform(src_points, dst_points)
# 투시 변환 적용
transformed_img = cv2.warpPerspective(img, transform_matrix, (target_width, target_height))
# 이미지 표시
cv2.imshow('원본 이미지', img)
cv2.imshow('변환된 이미지', transformed_img)
# 사용자 입력 대기
cv2.waitKey(0)
if __name__ == '__main__':
process_image()
코드 설명
1.
라이브러리 임포트
import cv2
import numpy as np
- `cv2`: OpenCV의 Python 인터페이스
- `numpy`: 이미지 데이터를 처리하는 배열 사용
2.
함수 정의
def process_image():
"""
이미지를 투시 변환합니다.
"""
3.
이미지 읽기
img = cv2.imread('./resources/card.jpeg')
print(type(img))
print(img.shape)
- `cv2.imread()`: 이미지 파일을 읽습니다.
- `print()` 함수는 이미지 유형과 크기를 확인합니다.
4.
목표 크기 설정
target_width, target_height = 300, 200
5.
원본 및 목적 점 설정
src_points = np.float32([
[94, 302],
[205, 243],
[152, 369],
[265, 300]
])
dst_points = np.float32([
[0, 0],
[target_width, 0],
[0, target_height],
[target_width, target_height]
])
6.
투시 변환 매트릭스 계산
transform_matrix = cv2.getPerspectiveTransform(src_points, dst_points)
7.
투시 변환 적용
transformed_img = cv2.warpPerspective(img, transform_matrix, (target_width, target_height))
8.
이미지 표시
cv2.imshow('원본 이미지', img)
cv2.imshow('변환된 이미지', transformed_img)
9.
프로그램 종료 대기
cv2.waitKey(0)
참고사항
- `src_points`의 좌표는 원본 이미지에서 선택한 사물체의 네개 모퉁이 좌표입니다.
- 좌표값은 이미지 편집 도구를 통해 수동으로 측정하거나, 컴퓨터 비전 기술로 자동 검출할 수 있습니다.