OpenCV에서 사용하는 좌표계를 직교 좌표계로 변환하는 예제입니다. 



2023. 4. 13 최초작성



OpenCV의 좌표계는 아래 그림처럼 왼쪽 위가 (0, 0)이고 오른쪽으로 갈수록 x좌표가 증가하며 아래로 내려갈수록 y좌표가 증가합니다. 

자세한 내용은 다음 포스트를 참고하세요.

 

OpenCV Python 그리기 예제 1. OpenCV의 좌표계

https://webnautes.tistory.com/580 

 



수학에서 접한 좌표계는 직교 좌표계로 보통 왼쪽 아래에 (0,0)이 주어지며 오른쪽으로 갈수록 x좌표가 증가하고, 위로 올라갈수록 y좌표가 증가합니다. 



OpenCV의 좌표계를 직교 좌표계로 변환하는 코드를 간단히 작성해봤습니다. 화면 중앙에 (0,0)이 위치하며 오른쪽으로 갈 수록 x좌표가 증가하고 위로 갈수록 y좌표가 증가합니다. 



실행후 화면 중앙에 보이는 파란점이 (0,0)이며 주위에 마우스로 클릭하면 해당 좌표가 출력됩니다. 

 

 



전체 코드입니다.

 

import cv2
import numpy as np


def mouse_event(event, x, y, flags, param):
    global cx,cy, end

    if event == cv2.EVENT_FLAG_LBUTTON:  
       
        cx = x
        cy = y

        end = np.array((cx,cy))


img_color = np.zeros((800,800,3), dtype=np.uint8)
h,w,c = img_color.shape

cx=0
cy=0


img = img_color.copy()

cv2.circle(img, (w//2, h//2), 10, (255, 0, 0), 2)
start = np.array((w//2,h//2))

end = None

while(1):

    if not end is None:
        cv2.circle(img, (cx, cy), 5, (0, 255, 0), 2)
        cv2.line(img, (w//2, h//2), (cx, cy), (255,255,255), 1)

       
        vector = end

        # 왼쪽 위가 (0,0)인 좌표계를  화면 중앙이 (0,0)이 되도록 바꾸어 줍니다.
        vector[0] = vector[0] - w/2
        vector[1] = -vector[1] + h/2

        cv2.putText(img, str(vector), (cx+10,cy+10), cv2.FONT_HERSHEY_SIMPLEX, 0.5, (0,255,0), 1)
        end = None

    cv2.imshow('test', img)
    cv2.setMouseCallback("test", mouse_event)
    key = cv2.waitKey(1)
    if key == 27: #esc key
        break






블로그를 이전합니다. 여기에서 사라진 글은 https://webnautes.blog 로 옮겨진 글입니다. 블로그 이전 관계로 webnautes.tistory.com에 대한 구글 검색을 중지했습니다.


소스코드 복사시 하단에 있는 앵커 광고의 왼쪽 위를 클릭하여 닫은 후 해야 합니다.


문제가 생기면 포스트와 다르게 진행한 부분을 먼저 확인해보세요.
질문을 남겨주면 가능한 빨리 답변드립니다.


제가 쓴 책도 한번 검토해보세요 ^^

  • 네이버 블러그 공유하기
  • 네이버 밴드에 공유하기
  • 페이스북 공유하기
  • 카카오스토리 공유하기