반응형

OpenCV의 트랙바를 사용하여 Aspect Ratio를 시각화해봅니다.  트랙바는 실수를 지원하지 않기 때문에 변화되는 값을 배열에 저장한 후, 트랙바를 움직여 얻은 값을 배열의 인덱스로 사용했습니다. 



2023. 10. 9  최초작성




실행결과입니다. aspect ratio가 1이면 정사각형이 되며, aspect ratio가 1보다 작으면 세로로 긴 사각형, aspect ratio가 1보다 크면 가로로 긴 사각형이 됩니다.  아래 이미지에서 왼쪽은 aspect ratio가 0.3인 경우이며, 중앙은 aspect ratio가 1.0인 경우이며 오른쪽은 aspect ratio가 2.0인 경우입니다.



전체 소스코드입니다.

import cv2
import numpy as np


def change_value(v):
    global img

    img = img_origin.copy()

    if aspect_ratio[v] <= 1:
        rectangle_w = 100
        rectangle_h = int(rectangle_w/aspect_ratio[v])
    else:
        rectangle_h = 100
        rectangle_w = int(rectangle_h*aspect_ratio[v])

    x = int((image_w-rectangle_w)*0.5)
    y = int((image_h-rectangle_h)*0.5)

    cv2.rectangle(img, (x,y), (x+rectangle_w, y+rectangle_h), (0, 255, 255), -1)
    cv2.putText(img, str(round(aspect_ratio[v],2)) + ' ' + f'w={rectangle_w}  h={rectangle_h}', (10,50), cv2.FONT_HERSHEY_PLAIN, 2, (0,255,0), 2)

img = None
img_origin = np.zeros((700,700,3), dtype=np.uint8)
image_h,image_w,_ = img_origin.shape

aspect_ratio = np.arange(0.1, 3.3, 0.1)
print(aspect_ratio)

cv2.namedWindow('test_window')
cv2.createTrackbar('aspect ratio', 'test_window', 1, len(aspect_ratio)-1, change_value)
cv2.setTrackbarPos('aspect ratio', 'test_window', 9)

change_value(9)

while True:
       
    cv2.imshow('test_window', img)

    key = cv2.waitKey(1)
    if key == 27:
        break


반응형

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

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


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

+ Recent posts