通过颜色检测使用 Python-Opencv 自动滚动
先决条件:
- OpenCV
- 图形用户界面
无需通过触摸板或鼠标实际提供任何输入即可执行操作。本文讨论了如何使用 opencv 模块完成此操作。这里我们将使用颜色检测来滚动屏幕。当程序在执行期间检测到某种颜色时,屏幕开始自行滚动。
方法
- 导入模块
- 使用 cv2 捕获视频,此处使用默认网络摄像头使用 0,对于任何其他摄像头使用 1。
- 读取捕获的视频并将视频帧存储在变量中
- 获取框架的每种颜色。
- 使用可接受的颜色范围创建作为滚动输入所需颜色的遮罩。在这里它被视为绿色。
- 从蒙版获取轮廓和层次结构
- 使用 for 循环传递轮廓并计算面积。
- 检测到所需颜色时添加滚动机制(此处为绿色)。
- 使用 cv2.imshow() 显示帧并传递帧名称和帧变量以显示每个捕获的帧,将帧捕获过程置于 while 循环中。要退出进程,请使用等待键和中断语句。
- 然后停止网络摄像头的窗口。
下面是实现。
Python3
import cv2
import numpy as np
import pyautogui
low_green = np.array([25, 52, 72])
high_green = np.array([102, 255, 255])
cap = cv2.VideoCapture(0)
prev_y = 0
while True:
ret, frame = cap.read()
hsv = cv2.cvtColor(frame, cv2.COLOR_BGR2HSV)
mask = cv2.inRange(hsv, low_green, high_green)
contours, hierarchy = cv2.findContours(
mask, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)
for i in contours:
area = cv2.contourArea(i)
if area > 1000:
x, y, w, h = cv2.boundingRect(i)
cv2.rectangle(frame, (x, y), (x+w, y+h), (0, 255, 0), 2)
if y < prev_y:
pyautogui.press('space')
prev_y = y
cv2.imshow('frame', frame)
if cv2.waitKey(1) == ord('q'):
break
cap.release()
cap.closeAllWindow()
输入: