본문 바로가기
프로그래밍/python

[OpenCV] OpenCV를 활용한 퍼스펙티브 변환 (Perspective Transformation)

by 코끼리_땃쥐 2024. 9. 5.

OpenCV는 이미지 처리와 컴퓨터 비전에서 많이 사용하는 라이브러리로, 다양한 기능을 제공합니다. 그 중 퍼스펙티브 변환은 이미지를 다른 시점에서 본 것처럼 변환하는 기술입니다. 예를 들어, 사진에서 사각형 모양의 물체가 특정 각도에서 촬영되었을 때, 이를 정면에서 본 것처럼 변환할 수 있습니다. 이번 글에서는 OpenCV를 이용해 퍼스펙티브 변환을 수행하는 방법에 대해 알아보겠습니다.

퍼스펙티브 변환이란?

**퍼스펙티브 변환(Perspective Transformation)**은 2D 이미지에서 평면의 사각형 영역을 다른 평면 상에서 새로운 시점으로 투영하는 작업입니다. 이를 통해 이미지 속 기하학적 왜곡을 제거하거나 원하는 시점에서의 모습을 볼 수 있습니다.

활용 예시:

  • 문서 이미지에서 왜곡된 페이지를 정면에서 본 것처럼 바로잡기.
  • 도로 표지판이나 빌보드와 같은 사각형 물체를 정면으로 변환하기.

주요 개념: 호모그래피 (Homography)

퍼스펙티브 변환은 **호모그래피(Homography)**라는 수학적 변환을 사용합니다. 호모그래피는 4개의 점을 기반으로 두 평면 사이의 대응 관계를 계산합니다. 이미지에서 변환하려는 영역의 네 점과 변환 후 원하는 위치의 네 점을 사용하여 변환 행렬을 계산합니다.

OpenCV에서 퍼스펙티브 변환 구현

1. 네 개의 기준점 설정

먼저, 변환하려는 이미지에서 사각형 영역의 네 개의 기준점을 설정해야 합니다. 이 기준점은 이미지를 정면에서 본 것처럼 변환하는 데 사용됩니다.

2. 변환 후의 위치 지정

두 번째로, 변환 후 해당 사각형 영역이 이동할 네 개의 점을 설정합니다. 이는 변환된 이미지가 나타날 위치를 결정합니다.

3. 호모그래피 계산 및 변환 수행

OpenCV의 getPerspectiveTransform() 함수를 사용해 원본과 변환 후의 점들을 입력받아 변환 행렬을 계산하고, warpPerspective() 함수를 통해 실제 변환을 수행합니다.

test.jpg

# example.py
import cv2
import numpy as np

# 원본 이미지 읽기
image = cv2.imread('test.jpg')

# 변환하려는 영역의 네 개의 점 (좌상, 우상, 우하, 좌하)
src_points = np.float32([[12, 30], [164, 47], [188, 188], [12, 163]])

# 변환 후 원하는 위치의 네 개의 점
dst_points = np.float32([[0, 0], [150, 0], [150, 150], [0, 150]])

# 퍼스펙티브 변환 행렬 계산
matrix = cv2.getPerspectiveTransform(src_points, dst_points)

# 이미지 변환
result = cv2.warpPerspective(image, matrix, (150, 150))

# 결과 이미지 출력
cv2.imshow('Perspective Transformation', result)
cv2.waitKey(0)
cv2.destroyAllWindows()

코드 설명:

  1. 이미지 불러오기: cv2.imread() 함수를 사용해 원본 이미지를 불러옵니다.
  2. 네 개의 기준점 설정: src_points는 원본 이미지에서 변환하려는 사각형 영역의 네 개의 좌표입니다.
  3. 변환 후의 위치 설정: dst_points는 변환된 이미지에서 사각형이 나타날 위치를 지정합니다.
  4. 호모그래피 행렬 계산: cv2.getPerspectiveTransform() 함수로 변환 행렬을 계산합니다.
  5. 이미지 변환: cv2.warpPerspective() 함수를 통해 실제로 이미지를 변환합니다.
  6. 결과 이미지 출력: 변환된 이미지를 출력 창에 보여줍니다.

 

퍼스펙티브 변환의 응용

1. 문서 스캐닝

퍼스펙티브 변환은 문서 스캐닝에서 널리 사용됩니다. 스마트폰으로 촬영한 문서의 이미지가 기울어져 있을 경우, 이 변환을 통해 정면에서 본 것처럼 바로잡을 수 있습니다.

2. 사각형 물체의 왜곡 제거

도로 표지판이나 빌보드와 같은 사각형 물체를 촬영한 후 왜곡된 이미지를 정면으로 교정할 때 사용할 수 있습니다.

3. 게임 및 증강 현실

게임 개발이나 **증강 현실(AR)**에서도 퍼스펙티브 변환을 사용하여 가상의 객체를 실제 환경에 자연스럽게 맞추는 데 활용됩니다.

결론

퍼스펙티브 변환은 이미지에서 사각형 영역을 원하는 시점으로 변환하는 강력한 도구입니다. OpenCV의 간단한 함수들을 통해 이 변환을 쉽게 수행할 수 있으며, 이를 통해 이미지 처리에서의 왜곡 제거, 문서 보정 등 다양한 응용 분야에서 활용 가능합니다.

이번 포스팅에서 제공한 코드와 개념을 바탕으로 더 복잡한 이미지 변환 작업도 시도해보세요!


이 글이 퍼스펙티브 변환을 이해하는 데 도움이 되었길 바랍니다. OpenCV와 같은 도구를 활용하면 이미지 처리와 컴퓨터 비전 작업이 훨씬 간편해집니다.

댓글