目标
在本教程中,您将学习以下内容:
使用OpenCV cv : inRange函数执行基本阈值操作。
根据HSV颜色空间的像素值范围检测对象。
原理
在上一个教程中,您学习了如何使用cv : threshold函数执行阈值处理。
在本教程中,您将学习如何使用cv :inRange函数来执行此操作。
概念不变,但现在添加了所需的一系列像素值。
HSV色彩空间
色调/饱和度/亮度(HSV )颜色空间是表示颜色空间的模型,如RGB颜色模型。 根据色相通道建模颜色类型,对于需要按颜色分割对象的图像处理任务非常有用。 色度的变化表示颜色成分的多少。 亮度通道表示颜色的亮度。 下图显示了HSV圆柱图。
由于RGB色彩空间中的颜色使用三个通道对进行编码,因此基于颜色分割图像中的对象更加困难。 (HSV中只有Hue的一个通道表示颜色)
有关使用cv : cvtColor函数将一个颜色空间转换为另一个颜色空间的表达式,请参见颜色转换
inRange ) )函数说明
语音识别(inputarraysrc,
InputArray lowerb,
输入阵列更新器,
OutputArray dst;
第一个参数:输入图像
第二个参数: h、s和v的最小值,例如scalar(low_h、low_S和low_V ) ) )。
第三个参数: h、s和v的最大值,例如scalar(low_h、low_S和low_V ) )。
第四个参数:输出图像必须与输入图像大小相同,且为CV_8U类
源代码
#include iostream
#include 'opencv2/imgproc.hpp '
#include 'opencv2/highgui.hpp '
using namespace cv;
int main () )
{
videocapturecapture(0;
//【2】循环显示各帧
while(1)。
{
马特图像; //定义保存各帧图像的Mat变量
捕获图像; //读取当前帧
//====================================
Mat hsv=image.clone (;
Mat frame_threshold=image.clone (;
cvtcolor(image、hsv、COLOR_BGR2HSV );
双低_ h=35;
双低_ s=43;
双低_ v=46;
双精度high _ h=77;
双精度high _ s=255;
双精度high _ v=255;
inrange(HSV,scalar ) low_h,low_S,low_V ),scalar (high _ s,high_V ),frame_threshold ) )。
imshow(ini )、image );
imshow(out1)、hsv );
imshow(out2)、frame_threshold );
等待密钥(30; //延迟30ms
}
返回0;
}
步骤的说明
从默认的或提供的捕获设备捕获视频流。
int main () )
{
videocapturecapture(0;
//【2】循环显示各帧
while(1)。
{
马特图像; //定义保存各帧图像的Mat变量
捕获图像; //读取当前帧
//====================================
定义图像
Mat hsv=image.clone (;
Mat frame_threshold=image.clone (;
转换颜色空间
cvtcolor(image、hsv、COLOR_BGR2HSV );
设定HSV值的范围
双低_ h=35;
双低_ s=43;
双低_ v=46;
双精度high _ h=77;
双精度high _ s=255;
双精度high _ v=255;
基于HSV范围的图像检测
inrange(HSV,scalar ) low_h,low_S,low_V ),scalar (high _ s,high_V ),frame_threshold ) )。
显示结果
imshow(ini )、image );
imshow(out1)、hsv );
imshow(out2)、frame_threshold );