首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >C++ OpenCV使用InRange对HSV颜色进行分割

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

作者头像
Vaccae
发布2019-07-25 10:57:19
发布2019-07-25 10:57:19
7.6K0
举报
文章被收录于专栏:微卡智享微卡智享

前言

上一篇中我们学习了《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把颜色分割后显示出来

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

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

  1. 图像必须先通过cvtColor转换为HSV的图像
  2. 定义的Scalar里的三个数值就是以H,S,V的参数设置的

-END-

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2019-02-18,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 微卡智享 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档