📜  通过颜色检测使用 Python-Opencv 自动滚动

📅  最后修改于: 2022-05-13 01:55:10.334000             🧑  作者: Mango

通过颜色检测使用 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()


输入:

检测绿色