前言
上一篇中我们学习了《OpenCV---HSV颜色空间介绍》,对HSV的颜色进行了一个简单的了解,这一章我们在研究一下利用颜色把想到的数据获取出来。OpenCV中的inRange()函数可实现二值化功能(这点类似threshold()函数)
视频效果
https://v.qq.com/x/page/l13584t9l4w.html
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把颜色分割后显示出来
运行后的效果就是文章开始的视频,下面是视频中的屏幕截图
上面的视频中我们可以看出来,蓝色的都已经获取下来了,说一下重点:
-END-