C++OpenCV怎么使用InRange对HSV颜色进行分割

这篇文章主要讲解了“C++ OpenCV怎么使用InRange对HSV颜色进行分割”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“C++ OpenCV怎么使用InRange对HSV颜色进行分割”吧!

成都创新互联公司主营扶绥网站建设的网络公司,主营网站建设方案,成都app软件开发,扶绥h5微信小程序定制开发搭建,扶绥网站营销推广欢迎扶绥等地区企业咨询

API函数

void inRange(InputArray src, InputArray lowerb, InputArray upperb, OutputArray dst)
官方文档中的解释:检查数组元素是否在另外两个数组元素值之间。这里的数组通常也就是矩阵Mat或向量。请注意:该函数输出的dst是一幅二值化之后的图像。

使用示例1:针对单通道图像
dst(I) = lowerb(I)0 ≤ src(I)0 < upperb(I)0
即,如果一幅灰度图像的某个像素的灰度值在指定的高、低阈值范围之内,则在dst图像中令该像素值为255,否则令其为0,这样就生成了一幅二值化的输出图像。

使用示例2:针对三通道图像
dst(I) = lowerb(I)0 ≤ src(I)0 < upperb(I)0 ∧ lowerb(I)1 ≤ src(I)1 < upperb(I)1 ∧lowerb(I)2 ≤ src(I)2 < upperb(I)2
即,每个通道的像素值都必须在规定的阈值范围内!


代码演示

我们再新建一个项目名为opencv--video2,按照配置属性(VS2017配置OpenCV通用属性),然后在源文件写入#include和main方法

C++ OpenCV怎么使用InRange对HSV颜色进行分割

C++ OpenCV怎么使用InRange对HSV颜色进行分割

我这里提前录了一个test6.mp4的视频,我们这里运行一下这个程序看看原始视频。

从视频中我们看到,里面我拿了一个蓝色的按摩器来镜头里来回晃动。

下面我们就通过InRange的函数把蓝色提取出来进行分割。在《》一篇中的颜色HSV的表格中我们可以看到蓝色的H范围在100-124之间,S的范围在43-255之间,V的范围在46-255之间,如下图:

C++ OpenCV怎么使用InRange对HSV颜色进行分割

所以我们在代码中先把这两个范围值定义出来

C++ OpenCV怎么使用InRange对HSV颜色进行分割

然后我们在视频播放的时候需要对原始图像转换变HSV图像,然后通过InRange把颜色分割后显示出来

C++ OpenCV怎么使用InRange对HSV颜色进行分割

运行后的效果就是文章开始的视频,下面是视频中的屏幕截图

C++ OpenCV怎么使用InRange对HSV颜色进行分割

上面的视频中我们可以看出来,蓝色的都已经获取下来了,说一下重点:

  1. 图像必须先通过cvtColor转换为HSV的图像

  2. 定义的Scalar里的三个数值就是以H,S,V的参数设置的

感谢各位的阅读,以上就是“C++ OpenCV怎么使用InRange对HSV颜色进行分割”的内容了,经过本文的学习后,相信大家对C++ OpenCV怎么使用InRange对HSV颜色进行分割这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是创新互联,小编将为大家推送更多相关知识点的文章,欢迎关注!


本文名称:C++OpenCV怎么使用InRange对HSV颜色进行分割
网页路径:http://azwzsj.com/article/pohjsc.html