目录
一、HSV颜色空间
H(色调):0~180
S(饱和度):0~255
V(亮度):0~255
二、颜色检测(inRange函数)
inRange(imgHSV, Scalar(iLowH, iLowS, iLowV), Scalar(iHighH, iHighS, iHighV), imgThresholded); //Threshold the image
函数进行颜色检测,这个函数的作用就是检测src图像的每一个像素是不是在lowerb和upperb之间,如果是,这个像素就设置为255(白),并保存在dst图像中,否则为0(黑)。
int main() {
string path = "C:\\Users\\Rong\\Desktop\\Resources\\lambo.png";
Mat img = imread(path);
Mat imgHSV, mask;
int hmin = 0, smin = 110, vmin = 153;
int hmax = 19, smax = 240, vmax = 255;
cvtColor(img, imgHSV, COLOR_BGR2HSV);
Scalar lower(hmin, smin, vmin); //下限的颜色值
Scalar upper(hmax, smax, vmax); //上线的颜色值
inRange(imgHSV, lower, upper, mask);
imshow("Image", img);
imshow("Image HSV", imgHSV);
imshow("Image Mask", mask);
waitKey(0);
return 0;
}
三、轨迹条
int createTrackbar(conststring& trackbarname, conststring& winname, int* value, int count, TrackbarCallback onChange=0,void* userdata=0);
第一个参数:轨迹条的名字
第二个参数:窗口的名字
第三个参数:一个指向整型的指针,表示滑块的位置。
第四个参数:表示滑块可以达到的最大位置的值。PS:滑块最小的位置的值始终为0。
int hmin=0, smin=0, vmin=0, hmax=0, smax=0, vmax=0;
int main() {
string path = "C:\\Users\\Rong\\Desktop\\Resources\\shapes.png";
Mat Img = imread(path);
Mat src, dst;
cvtColor(Img, src, COLOR_BGR2HSV);
//每次在轨迹条上 改变的是指针指向的变量的值
namedWindow("TrackBar",(700,700));
createTrackbar("Hmin", "TrackBar", &hmin, 180);
createTrackbar("Hmax", "TrackBar", &hmax, 180);
createTrackbar("Smin", "TrackBar", &smin, 255);
createTrackbar("Smax", "TrackBar", &smax, 255);
createTrackbar("Vmin", "TrackBar", &vmin, 255);
createTrackbar("Vmax", "TrackBar", &vmax, 255);
while (true) {
//所以我们可以检测当那些轨迹条上的变量变化时 图像长什么样子
Scalar lower(hmin, smin, vmin);
Scalar upper(hmax, smax, vmax);
inRange(src, lower, upper, dst);
imshow("Image src", src);
imshow("Image dst", dst);
//注:这里是1
waitKey(1);
}
return 0;
}