OpenCV를 사용한 이미지 투시 변환

이미지 투시 변환 소개

컴퓨터 비전 분야에서 다양한 기하학적 변환을 수행할 때 투시 변환은 매우 중요한 기술입니다. 투시 변환은 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`의 좌표는 원본 이미지에서 선택한 사물체의 네개 모퉁이 좌표입니다. - 좌표값은 이미지 편집 도구를 통해 수동으로 측정하거나, 컴퓨터 비전 기술로 자동 검출할 수 있습니다.

태그: OpenCV python 투시 변환

6월 13일 01:20에 게시됨