250x250
Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- FLASK
- vue.js
- POD
- 텐서플로우
- 컴퓨터 비전
- Docker
- 웹 프로그래밍
- MariaDB
- 장고
- 딥러닝
- yaml
- Computer Vision
- 논문 리뷰
- Django
- Tkinter
- 그래픽 유저 인터페이스
- GUI
- OpenCV
- kubernetes
- Deep Learning
- tensorflow
- Web Programming
- k8s
- paper review
- 파이토치
- pytorch
- 데이터베이스
- numpy
- 파이썬
- Python
Archives
- Today
- Total
Maxima's Lab
[Python, Opencv] Mouse Event (마우스 이벤트) 본문
728x90
SMALL
안녕하세요, 오늘은 Opencv를 활용한 Mouse Event (마우스 이벤트)를 사용하는 방법에 대해서 알아보도록 하겠습니다.
마우스 이벤트를 활용하여 구현해볼 예시는 다음과 같습니다.
1. Mouse의 왼쪽 버튼을 누르는 이벤트를 발생 시 해당 위치 정보를 저장하여 시각화
2. Mouse의 왼쪽 버튼을 누르는 이벤트를 발생 시 기존 Original Image에 있었던 도형을 지우며, 지워진 도형에 대한 위치 정보를 저장하여 시각화
Mouse Event 중 cv2.EVENT_LBUTTONDOWN과 cv2.EVENT_MOUSEMOVE를 이용하여, Black Image에 Mouse의 왼쪽 버튼과 Mouse의 이동에 따른 위치 정보를 White 값으로 시각화하는 예시입니다.
import cv2
import numpy as np
img = np.zeros(shape = (512, 512, 3)).astype("uint8")
def LBEvent(event, x, y, flags, params):
global prior_x, prior_y
if event == cv2.EVENT_LBUTTONDOWN:
prior_x, prior_y = x, y
elif event == cv2.EVENT_MOUSEMOVE:
if flags & cv2.EVENT_FLAG_LBUTTON:
for height_y in range(0, 30):
for width_x in range(0, 30):
img[y + height_y, x + width_x] = 255
cv2.imshow("Original Image", img)
prior_x, prior_y = x, y
cv2.namedWindow("Original Image")
cv2.resizeWindow("Original Image", 600, 600)
cv2.setMouseCallback("Original Image", LBEvent, img)
cv2.imshow("Original Image", img)
cv2.waitKey(0)
cv2.destroyAllWindows()
다음은 기존의 Original Image에 특정 영역에 Mouse Event를 적용할 경우 해당 영역을 Black 값으로 수정하고 지워진 영역에 대한 위치 정보를 시각화하는 예시입니다.
import cv2
import numpy as np
img = cv2.imread("...")
result_img = np.zeros(shape = img.shape).astype("uint8")
def LBEvent(event, x, y, flags, params):
global prior_x, prior_y
if event == cv2.EVENT_LBUTTONDOWN:
prior_x, prior_y = x, y
elif event == cv2.EVENT_MOUSEMOVE:
if flags & cv2.EVENT_FLAG_LBUTTON:
for height_y in range(0, 10):
for width_x in range(0, 10):
img[y + height_y, x + width_x] = 0
result_img[y + height_y, x + width_x] = 255
cv2.imshow("Original Image", img)
cv2.imshow("Result Image", result_img)
prior_x, prior_y = x, y
cv2.namedWindow("Original Image")
cv2.resizeWindow("Original Image", 600, 600)
cv2.namedWindow("Result Image")
cv2.resizeWindow("Result Image", 600, 600)
cv2.setMouseCallback("Original Image", LBEvent, img)
cv2.imshow("Original Image", img)
cv2.imshow("Result Image", result_img)
cv2.waitKey(0)
cv2.destroyAllWindows()
다음은, Original Image에 Mouse Event를 적용한 결과입니다.
위의 결과를 보시면, 좌측 이미지의 Red Rectangle 영역 내 Mouse Event를 적용한 경우 해당 영역은 지워지고, 해당 영역에 대한 위치 정보가 우측 이미지에 시각화된 결과입니다.
지금까지 Opencv 내 Mouse Event를 활용하여, 해당 위치 정보를 시각화하는 방법에 대해 알아보았습니다.
728x90
LIST
'Python > Opencv' 카테고리의 다른 글
[Python, Opencv] Binary Objects을 포함하는 가장 작은 사각형 찾기 (0) | 2024.03.16 |
---|---|
[Python, Opencv] Edge Detection (엣지 검출) - Sobel Filter (소벨 필터) (1) | 2022.06.29 |
[Python, Opencv] Template matching (템플릿 매칭) (0) | 2022.06.14 |
[Python, Opencv] Kmeans Clustering (Image Segmentation) & 3-D Scatter Plot (0) | 2022.06.02 |
Comments