일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
Tags
- Crawling
- pandas
- Scrum
- TypeScript
- 다나와
- ECS
- data
- keras
- Method
- DANAWA
- analyzing
- adaptive life cycle
- instance
- 애자일
- webcrawling
- data analyze
- 크롤링
- algorithm
- javascript
- matplotlib
- Project
- 프로젝트
- 자바스크립트
- python
- opencv
- tensorflow
- Agile
- angular
- AWS
- visualizing
Archives
- Today
- Total
LiJell's 성장기
06. OpenCV 키보드 마우스 이벤트 처리 (6편) 본문
반응형
2022.01.27 - [Bigdata/OpenCV] - 07. OpenCV Point Processing (7편)
2022.01.26 - [Bigdata/OpenCV] - 05. OpenCV Basic 두번째 (5편)
6. OpenCV keyboard mouse event
import numpy as np
import sys
import cv2
6.1. 키보드 event
img = cv2.imread('./Ch_2_Opencv_basic/fig/cat.bmp')
if img is None:
print('image read failed')
sys.exit()
cv2.imshow('image', img)
img1 = img.copy()
while True:
key = cv2.waitKey()
if key == 27:
break
elif key == ord('e'):
img = cv2.Canny(img, 50, 150) # edge
cv2.imshow('image', img)
elif key == ord('i'):
img = 255 - img
cv2.imshow('image', img) # inverse
elif key == ord('r'):
img = img1.copy()
cv2.imshow('image', img) # 원래 사진으로 돌아가기
cv2.destroyAllWindows()
6.2. 마우스 event
6.2.1. 단순 event
def call_mouse(event, x, y, flags, param):
if event == cv2.EVENT_LBUTTONDOWN: # 왼쪽 버튼이 내려갈 때
print('left btn down = ', x, y)
elif event == cv2.EVENT_LBUTTONUP: # 오른쪽 버튼이 올라갈 때
print('left btn up = ',x, y)
elif event == cv2.EVENT_MOUSEMOVE: # 움직일 때
if flags == cv2.EVENT_FLAG_LBUTTON: # 왼쪽 버튼을 누르고 있을 때 (FLAG)
# 두개가 합쳐져서 왼쪽 버튼을 누르고 움직일 때 동작함.
print(x, y)
img = np.ones((480, 640, 3), np.uint8)*255
cv2.namedWindow('image')
# cv2.setMouseCallback(windowName, onMouse, param = None) -> None
# windowName: 마우스이벤트를 수행할 창 이름
# onMouse: 마우스 이벤트 콜벡함수
# param: 콜백함수에 전달할 데이터
cv2.setMouseCallback('image', call_mouse, img)
cv2.imshow('image',img)
cv2.waitKey()
cv2.destroyAllWindows()
6.2.2. 그림 또는 이름을 쓸 수 있게 만들기
oldx = oldy = 0 # 시작점을 제공
def call_mouse(event, x, y, flags, param):
global oldx, oldy
if event == cv2.EVENT_LBUTTONDOWN:
oldx, oldy = x, y
elif event == cv2.EVENT_MOUSEMOVE:
if flags == cv2.EVENT_FLAG_LBUTTON:
cv2.line(img, (oldx, oldy), (x, y), (0,0,255), 5, cv2.LINE_AA)
cv2.imshow('image', img)
oldx, oldy = x, y # 키가 다시 oldx, oldy로 돌아가서 다시 그려줌
# 결적으로 부드럽고 연결된 선을 그릴 수 있다.
img = np.ones((480, 640, 3), np.uint8)*255
cv2.namedWindow('image')
# cv2.setMouseCallback(windowName, onMouse, param = None) -> None
# windowName: 마우스이벤트를 수행할 창 이름
# onMouse: 마우스 이벤트 콜벡함수
# param: 콜백함수에 전달할 데이터
cv2.setMouseCallback('image', call_mouse, img)
cv2.imshow('image',img)
cv2.waitKey()
cv2.destroyAllWindows()
6.2.3. 싸인해서 저장하기
start = 0
def call_mouse(event, x, y, flags, param):
global start
if event == cv2.EVENT_LBUTTONDOWN:
start = x, y
elif event == cv2.EVENT_MOUSEMOVE:
if flags == cv2.EVENT_FLAG_LBUTTON:
cv2.line(img, (start), (x, y), (0,0,255), 5, cv2.LINE_AA)
cv2.imshow('image', img)
start = x, y
img = np.ones((480, 640, 3), np.uint8)*255
cv2.namedWindow('image')
# cv2.setMouseCallback(windowName, onMouse, param = None) -> None
# windowName: 마우스이벤트를 수행할 창 이름
# onMouse: 마우스 이벤트 콜벡함수
# param: 콜백함수에 전달할 데이터
cv2.setMouseCallback('image', call_mouse, img)
cv2.imshow('image',img)
while True:
key = cv2.waitKey()
if key == 27:
break
elif key == ord('s'):
cv2.imwrite('./signiture.png', img)
cv2.destroyAllWindows()
6.3. trackbar
6.3.1. Normal case
- 화면을 읽어 낸 후 조절을 가능하게 한다
def call_trackbar(pos):
img[:] = pos
cv2.imshow('image', img)
img = np.zeros((480,640), np.uint8)
cv2.namedWindow('image')
# createTrackbar(trackbarName, windowName, value, count, onChange) -> None
# trackbarName: 트랙바 이름
# windowName : 트랙바를 생성할 창 이름
# value : 트랙바 위치 초기값
# count : 트랙바 최댓값, 최솟값은 0
# onChange :callback 함수 e.g., onChange(pos) 위치를 정수형태로 전달
cv2.createTrackbar('level', 'image', 50, 255, call_trackbar) # 밝기 조절
cv2.imshow('image', img)
while True:
key = cv2.waitKey()
if key == 27:
break
cv2.destroyAllWindows()
6.3.2 alpha channel로 하기
def call_trackbar(pos):
global mask
img_glass = mask*pos # 값이 0 또는 1이기 때문에 곱해줄 수 있다
cv2.imshow('image', img_glass)
img_alpha = cv2.imread('./Ch_2_Opencv_basic/fig/imgbin_sunglasses_1.png', cv2.IMREAD_UNCHANGED)
mask = img_alpha[:,:,-1]
mask[mask > 0] = 1 # 혹시 모르니 0보다 큰 값을 모두 1로 변환
cv2.namedWindow('image')
# createTrackbar(trackbarName, windowName, value, count, onChange) -> None
# trackbarName: 트랙바 이름
# windowName : 트랙바를 생성할 창 이름
# value : 트랙바 위치 초기값
# count : 트랙바 최댓값, 최솟값은 0
# onChange :callback 함수 e.g., onChange(pos) 위치를 정수형태로 전달
cv2.namedWindow('image', cv2.WINDOW_NORMAL)
cv2.imshow('image', mask)
cv2.createTrackbar('level','image', 0, 255, call_trackbar)
while True:
key = cv2.waitKey()
if key == 27:
break
cv2.destroyAllWindows()
반응형
'Bigdata > OpenCV' 카테고리의 다른 글
08. OpenCV Histogram Modification (8편) (0) | 2022.01.28 |
---|---|
07. OpenCV Point Processing (7편) (0) | 2022.01.27 |
05. OpenCV Basic 두번째 (5편) (0) | 2022.01.26 |
04. OpenCV Basic Review + α (4편) (0) | 2022.01.26 |
03. OpenCV_Basic (3편) (0) | 2022.01.25 |
Comments