这篇文章主要讲解了“C++ OpenCV怎么使用InRange对HSV颜色进行分割”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“C++ OpenCV怎么使用InRange对HSV颜色进行分割”吧!
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方法
我这里提前录了一个test6.mp4的视频,我们这里运行一下这个程序看看原始视频。
从视频中我们看到,里面我拿了一个蓝色的按摩器来镜头里来回晃动。
下面我们就通过InRange的函数把蓝色提取出来进行分割。在《》一篇中的颜色HSV的表格中我们可以看到蓝色的H范围在100-124之间,S的范围在43-255之间,V的范围在46-255之间,如下图:
所以我们在代码中先把这两个范围值定义出来
然后我们在视频播放的时候需要对原始图像转换变HSV图像,然后通过InRange把颜色分割后显示出来
运行后的效果就是文章开始的视频,下面是视频中的屏幕截图
上面的视频中我们可以看出来,蓝色的都已经获取下来了,说一下重点:
图像必须先通过cvtColor转换为HSV的图像
定义的Scalar里的三个数值就是以H,S,V的参数设置的
感谢各位的阅读,以上就是“C++ OpenCV怎么使用InRange对HSV颜色进行分割”的内容了,经过本文的学习后,相信大家对C++ OpenCV怎么使用InRange对HSV颜色进行分割这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是亿速云,小编将为大家推送更多相关知识点的文章,欢迎关注!
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。