目录

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


上一篇:«

下一篇: »


评论

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注

*