1) 트랙바 사용
-> threshold 수치 변경을 위해
트랙바 값을 가져와 후에 Canny 에서 활용
2) mouse_callback
- 버튼 클릭 시 시작좌표로 선정
- 클릭하고 마우스 이동시 끝 좌표 계속 초기화
- 마우스 클릭때면 끝 좌표로 선정
cv.setMouseCallback('AAA', mouse_callback)
3) 비디오에 적용
마우스 클릭시
-> 작은 원으로 클릭 표시
마우스 이동중
-> 사각형을 생성
마우스 땟을때
-> 해당 영역을 복사해 온 후 Canny 처리
-> 좌표 예외처리 중요
사각형 그리기 시에 꼭, 왼쪽 위 좌표랑 오른쪽 아래 좌표를 알아야 한다.
근데 이게 역으로 들어가게 되면 에러가 생기니 꼭 swap을 하자
- 추가로 마우스를 클릭만 하고, 때게 되면 rectangle 함수에서 에러가 생기게 되므로, continue 처리도 하자.
import cv2 as cv
import numpy as np
mouse_press = False
start_x, start_y, end_x, end_y = 0, 0, 0, 0
step = 0
threshold_1, threshold_2 = 0, 0
def swap(a, b):
tmp = a
a = b
b = tmp
def on_trackbar(x):
pass
def mouse_callback(event, x, y, flags, param):
global step, start_x, start_y, end_x, end_y, mouse_press
if event == cv.EVENT_LBUTTONDOWN:
step = 1
mouse_press = True
start_x = x
start_y = y
elif event == cv.EVENT_MOUSEMOVE:
if(mouse_press == True):
end_x = x
end_y = y
step = 2
elif event == cv.EVENT_LBUTTONUP:
mouse_press = False
end_x = x
end_y = y
step = 3
cv.namedWindow('AAA')
cv.setMouseCallback('AAA', mouse_callback)
cv.createTrackbar('1', 'AAA', 0, 200, on_trackbar)
cv.createTrackbar('2', 'AAA', 0, 200, on_trackbar)
cap = cv.VideoCapture(0)
while True:
ret, img = cap.read()
threshold_1 = cv.getTrackbarPos('1', 'AAA')
threshold_2 = cv.getTrackbarPos('2', 'AAA')
if ret == False:
print("ERROR")
continue
# 클릭시
if step == 1:
cv.circle(img, (start_x, start_y), 10, (0, 231, 42), -1)
# 마우스 이동 중
elif step == 2:
cv.rectangle(img, (start_x, start_y), (end_x, end_y), (0, 231, 42), 3)
# 마우스 땟을때
elif step == 3:
if(start_x > end_x):
swap(start_x, end_x)
swap(start_y, end_y)
elif start_x == end_x:
continue
ROI = img[start_y:end_y, start_x:end_x]
ROI = cv.Canny(ROI, threshold_1, threshold_2)
ROI = cv.cvtColor(ROI, cv.COLOR_GRAY2BGR)
img[start_y:end_y, start_x:end_x] = ROI
cv.imshow('AAA', img)
if cv.waitKey(1) == 27:
break
'OpenCV > Python' 카테고리의 다른 글
이미지 기하학적 변환 (0) | 2021.06.13 |
---|---|
ROI - 3 응용하기2 ( 평균 색 추출하기) (0) | 2021.06.12 |
ROI -1 관심영역 설정 (0) | 2021.06.11 |
이미지 비트연산을 활용한 이미지 합성 (0) | 2021.06.11 |
물체 감싸기 (0) | 2021.06.11 |