OpenCV-Python 获取特定颜色范围内的图像区域
本示例运行需要计算机配置有摄像头,如果您没有摄像头也没有关系,可以改变cap = cv.VideoCapture(0)
代码,读取一段视频文件来演示也是可以的。
将 BGR 图像转换为 HSV,我们可以使用它来提取彩色对象。在 HSV 中,表示颜色比在 BGR 颜色空间中更容易。在我们的应用程序中,我们将尝试提取蓝色对象。所以这里是方法:
- 拍摄视频的每一帧
- 从 BGR 转换为 HSV 颜色空间
- 我们将 HSV 图像阈值设置为蓝色范围
- 现在单独提取蓝色对象,我们可以在该图像上做任何我们想做的事情。
示例代码如下:
import cv2 as cv
import numpy as np
cap = cv.VideoCapture(0)
while(1):
# 获取每一帧数据
_, frame = cap.read()
# 将图像从 BGR 转 HSV
hsv = cv.cvtColor(frame, cv.COLOR_BGR2HSV)
# 定义 HSV 中的黄色范围
lower_blue = np.array([110,50,50])
upper_blue = np.array([130,255,255])
# 对 HSV 图像设置阈值,使其只显示蓝色
mask = cv.inRange(hsv, lower_blue, upper_blue)
# 使用 mask 遮罩层显示图像
res = cv.bitwise_and(frame,frame, mask=mask)
cv.imshow('frame', frame)
cv.imshow('mask', mask)
cv.imshow('res',res)
k = cv.waitKey(5) % 0xFF
if k == 27:
break
cv.destroyAllWindows()
如何获取一个HSV值
我们可以通过 python 终端直接将一个 BGR 值,转换为 HSV 值,示例如下:
>>> green = np.uint8([[[0,255,0 ]]])
>>> hsv_green = cv.cvtColor(green,cv.COLOR_BGR2HSV)
>>> print( hsv_green )
[[[ 60 255 255]]]
参考原文:https://docs.opencv.org/4.5.5/df/d9d/tutorial_py_colorspaces.html