Bootstrap

opencv基础学习

2.3跟踪物体颜色:红色为例

代码如下:

import cv2
import numpy as np

# 指定摄像头索引,0通常是默认摄像头
cap = cv2.VideoCapture(0)

while (True):
    ret, frame = cap.read()
    if not ret:
        print("Failed to grab frame")
        break

    hsv = cv2.cvtColor(frame, cv2.COLOR_BGR2HSV)

    # 设定红色范围,这里是一个例子,可能需要根据实际情况调整
    lower_red = np.array([0, 50, 50])  # 考虑到红色的不同变种,这里从0开始
    upper_red = np.array([10, 255, 255])
    # 如果需要包含更广泛的红色,可以扩展范围
    # lower_red = np.array([0, 120, 70])
    # upper_red = np.array([10, 255, 255])

    mask1 = cv2.inRange(hsv, lower_red, upper_red)
    res=cv2.bitwise_and(frame,frame,mask=mask1)
    cv2.imshow("res",res)
    cv2.imshow("mask", mask1)
    cv2.imshow("frame", frame)

    k = cv2.waitKey(5) & 0xFF
    if k == 27:
        break

cap.release()
cv2.destroyAllWindows()

解析:

  • cv2.VideoCapture(0):打开摄像头设备,返回一个可以读取视频帧的对象。
  • cap.read():从视频捕获对象中读取一帧,返回 ret(成功标志)和 frame(图像帧)。
  • cv2.COLOR_BGR2HSV:将图像从 BGR 颜色空间转换为 HSV 颜色空间,HSV 更方便进行颜色检测,因为它将颜色的色调(H)、饱和度(S)和明度(V)分离。
  • cv2.inRange(hsv, lower_red, upper_red):在 HSV 图像中,根据 lower_red 和 upper_red 范围创建一个二值化的遮罩,在范围内的像素为白色,不在范围内的为黑色。
  • cv2.bitwise_and(frame, frame, mask=mask1):使用 mask1 遮罩对 frame 进行按位与操作,只保留 mask1 中白色部分对应的 frame 区域,其他部分置为黑色,从而实现对特定颜色的提取。
  • cv2.imshow:显示图像,第一个参数是窗口名称,第二个参数是要显示的图像。
  • cv2.waitKey(5):等待 5 毫秒,用于显示图像和检测键盘输入。
  • cap.release():释放摄像头资源,防止资源泄露。
;