参考:https://docs.opencv.org/3.4.5/da/d97/tutorial_threshold_inRange.html
若有表达不当或错误欢迎留言指正,互相交流学习,共同进步
在本教程中,您将学习如何:
HSV(色相/饱和度/明度)颜色空间是表示类似于RGB颜色模型的颜色空间的模型。根据色相通道(Channel)对颜色类型进行建模,因此在需要根据颜色对对象进行分割的图像处理任务中非常有用。饱和度的变化代表颜色成分的多少。明度通道描述颜色的亮度。下图显示了HSV圆柱图。
RGB颜色空间中的颜色使用三个通道对进行编码,因此基于颜色对图像中的对象进行分割更加困难。(而HSV中只有Hue一个通道表示颜色)
在颜色转换中描述了使用cv :: cvtColor函数从一个颜色空间转换到另一个颜色空间的公式
void inRange( InputArray src,
InputArray lowerb,
InputArray upperb,
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
#include "opencv2/imgproc.hpp"
#include "opencv2/highgui.hpp"
using namespace cv;
int main()
{
VideoCapture capture(0);
//【2】循环显示每一帧
while (1) //
{ //
Mat image; //定义一个Mat变量,用于存储每一帧的图像 //
capture >> image; //读取当前帧 //
//================================================================
Mat hsv = image.clone();
Mat frame_threshold = image.clone();
cvtColor(image, hsv, COLOR_BGR2HSV);
double low_H = 35;
double low_S = 43;
double low_V = 46;
double high_H = 77;
double high_S = 255;
double high_V = 255;
inRange(hsv, Scalar(low_H, low_S, low_V), Scalar(high_H, high_S, high_V), frame_threshold);
imshow("ini", image);
imshow("out1", hsv);
imshow("out2", frame_threshold);
//================================================================
//
//
waitKey(30); //延时30ms //
}
return 0;
}
int main()
{
VideoCapture capture(0);
//【2】循环显示每一帧
while (1) //
{ //
Mat image; //定义一个Mat变量,用于存储每一帧的图像 //
capture >> image; //读取当前帧 //
//================================================================
Mat hsv = image.clone();
Mat frame_threshold = image.clone();
cvtColor(image, hsv, COLOR_BGR2HSV);
double low_H = 35;
double low_S = 43;
double low_V = 46;
double high_H = 77;
double high_S = 255;
double high_V = 255;
inRange(hsv, Scalar(low_H, low_S, low_V), Scalar(high_H, high_S, high_V), frame_threshold);
imshow("ini", image);
imshow("out1", hsv);
imshow("out2", frame_threshold);