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()
:释放摄像头资源,防止资源泄露。