在opencv中提供了inRange()函数来检测颜色
inRange()
参数一:输入图像
参数二/三:色彩范围(提取颜色是将某一范围的颜色提取)
参数四:输出图像(称作蒙版)
见代码示例
#include<iostream>
#include<opencv2\opencv.hpp>
using namespace std;
using namespace cv;
int main()
{
Mat img = imread("D:\\photogallery\\其他\\兰博基尼.png");
resize(img, img, Size(), 0.5, 0.5);
Mat imgHSV, mask;
cvtColor(img, imgHSV, COLOR_BGR2HSV);
//色彩范围 在opencv中H最大179
int hmin = 0, smin = 0, vmin = 0;
int hmax = 179, smax = 255, vmax = 255;
//创建跟踪窗口
namedWindow("Trackbars", (640, 200));
createTrackbar("Hue min", "Trackbars", &hmin, 179);
createTrackbar("Hue max", "Trackbars", &hmax, 179);
createTrackbar("sat min", "Trackbars", &smin, 255);
createTrackbar("sat max", "Trackbars", &smax, 255);
createTrackbar("val min", "Trackbars", &vmin, 255);
createTrackbar("val max", "Trackbars", &vmax, 255);
while (true)
{
Scalar lower(hmin, smin, vmin);
Scalar upper(hmax, smax, vmax);
inRange(imgHSV, lower, upper, mask);
imshow("img", img);
imshow("imgHSV", imgHSV);
imshow("mask", mask);
waitKey(1);
}
return 0;
}
代码运行结果: