본문 바로가기

OpenCV/Python

그래픽 인터페이스 (GUI)

1. 트랙바

: Canny 함수를 써보자

 -> Canny 함수는 에지 검출 함수임,  threshold 두개를 입력으로 받는다.

 

: 트랙바의 수치를 가져와서 사용하고 싶으면 getTrackbarPos를 사용하면 된다.

cv.namedWindow("test")

cv.createTrackbar('low threshold', 'test', 0, 1000, on_trackbar)
cv.createTrackbar('high threshold', 'test', 0, 1000, on_trackbar)

# 초기 값
cv.setTrackbarPos('low threshold', 'test', 50)
cv.setTrackbarPos('high threshold', 'test', 150)

cv.imshow("aaa", img)

while True:
    low = cv.getTrackbarPos('low threshold', 'test')
    high = cv.getTrackbarPos('high threshold', 'test')

    img_test = cv.Canny(img, low, high)

    cv.imshow("test", img_test)

    if cv.waitKey(1) & 0xFF == 27:
        break

2. waitKey 함수

: 입력을 기다리는 함수, 이거 사용해서 동영상 속도도 늦출 수 있다.

: 0이면 무한 대기, 숫자면 숫자ms 만큼 대기

 

3. 마우스 이벤트

: 마우스를 땔때, 클릭할때, 드래그 할때 모두 신경써줘야한다. 생각보다 세세한 설정, 지시가 필요

import cv2 as cv
import numpy as np
import random

mouse_pressing = False
drawing_mode = True

start_x, start_y = -1, -1
color = (255, 255, 255)

img = np.zeros((512, 512, 3), np.uint8)


def mouse_callback(event, x, y, flags, param):
    global start_x, start_y, drawing_mode, mouse_pressing, color

    # 마우스 클릭 상태에서 움직이고 있다면
    if event == cv.EVENT_MOUSEMOVE:
        if mouse_pressing == True:
            if drawing_mode == True:
                cv.rectangle(img, (start_x, start_y), (x, y), color, -1)
            else:
                cv.circle(img, (start_x, start_y), max(
                    abs(start_x-x), abs(start_y-y)), color, -1)

    elif event == cv.EVENT_LBUTTONDOWN:
        color = (random.randrange((256)), random.randrange(
            (256)), random.randrange((256)))

        mouse_pressing = True
        # 클릭 했으니 시작 지점으로 정해주기
        start_x, start_y = x, y

    # 마우스 클릭 때면 그림 확정
    elif event == cv.EVENT_LBUTTONUP:
        mouse_pressing = False

        if drawing_mode == True:
            cv.rectangle(img, (start_x, start_y), (x, y), color, -1)

        else:
            cv.circle(img, (start_x, start_y), max(
                abs(start_x-x), abs(start_y-y)), color, -1)

    elif event == cv.EVENT_RBUTTONDOWN:
        drawing_mode = 1 - drawing_mode


cv.namedWindow('asd')
cv.setMouseCallback('asd', mouse_callback)


while(1):

    cv.imshow('asd', img)

    # 프로그램 종료
    key = cv.waitKey(1)
    if key == 27:
        break

 

'OpenCV > Python' 카테고리의 다른 글

물체 감싸기  (0) 2021.06.11
그리기에 관한 것!!!!  (0) 2021.06.11
넘파이  (0) 2021.06.09
Mat 객체 활용  (0) 2021.06.09
파이썬 기초 문법 -2  (0) 2021.06.01