반응형

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





반응형

문제 발생시 지나치지 마시고 댓글 남겨주시면 가능한 빨리 답장드립니다.


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

+ Recent posts