반응형

OpenCV에서 사용하는 Top Left를 원점으로 하는 좌표와  Bottom Left를 원점으로 하는 좌표 사이에 변환을 하는 예제 입니다. 

 

2023. 4. 29  최초작성



원점을 Bottom Left로 바꾼 후,  모서리 4군데의 좌표를 출력했습니다.   



전체 코드입니다. convert_coordinate 함수를 사용하여 원점이 TOP LEFT인 좌표계와 원점이 BOTTOM LEFT인 좌표계를 서로 변환할 수 있습니다. 아래 코드에서는 원점이 BOTTOM RIGHT인 좌표를 원점이 TOP LEFT인 좌표로 변환하여 화면에 원과 좌표를 출력합니다.   

import cv2
import numpy as np


# TOP LEFT <-> BOTTOM LEFT
def convert_coordinate(x,y):
    x = x
    y = height - y - 1

    return (x,y)


img = np.zeros((500,500,3), dtype=np.uint8)
height,width,channel = img.shape

x1,x2,x3,x4 = 0,500,500,0
y1,y2,y3,y4 = 0,0,500,500

cv2.circle(img, convert_coordinate(x1,y1), 30, (255,255,255),-1)
cv2.circle(img, convert_coordinate(x2,y2), 30, (255,255,255),-1)
cv2.circle(img, convert_coordinate(x3,y3), 30, (255,255,255),-1)
cv2.circle(img, convert_coordinate(x4,y4), 30, (255,255,255),-1)

font = cv2.FONT_HERSHEY_SIMPLEX
font_scale = 1
font_thickness = 1
text_color=(0, 255, 255)
offset = 70
text1 = f'1 ({x1},{y1})'
text2 = f'2 ({x2},{y2})'
text3 = f'3 ({x3},{y3})'
text4 = f'4 ({x4},{y4})'
(text2_w, text2_h), _ = cv2.getTextSize(text2, font, font_scale, font_thickness)
(text3_w, text3_h), _ = cv2.getTextSize(text2, font, font_scale, font_thickness)
cv2.putText(img, text1, convert_coordinate(x1+offset, y1+offset), font, font_scale, text_color, font_thickness)
cv2.putText(img, text2, convert_coordinate(x2-offset-text2_w, y2+offset), font, font_scale, text_color, font_thickness)
cv2.putText(img, text3, convert_coordinate(x3-offset-text3_w, y3-offset), font, font_scale, text_color, font_thickness)
cv2.putText(img, text4, convert_coordinate(x4+offset, y4-offset), font, font_scale, text_color, font_thickness)

cv2.imshow('test', img)
cv2.waitKey(0)





참고

https://gist.github.com/CMCDragonkai/aa36a0bcb63179624161bf2fa77bcd23 

 

반응형

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

도움이 되셨다면 토스아이디로 후원해주세요.
https://toss.me/momo2024


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

+ Recent posts