#include <iostream>
#include<opencv2/opencv.hpp>
using namespace std;
using namespace cv;
int main()
{
VideoCapture cap;
Mat image,hsvImage;
cap.open(0);
if(!cap.isOpened())
{
cout<<"Camera Error"<<endl;
return -1;
}
namedWindow("RGB");
namedWindow("HSV");
while(true)
{
cap>>image;
imshow("RGB",image);
cvtColor(image,hsvImage,CV_BGR2HSV);
int rows=hsvImage.rows;
int columns=hsvImage.cols;
for(int i=0;i<rows;i++)
{
uchar* p=hsvImage.ptr(i);//获取Mat某一行的首地址
for(int j=0;j<columns;j++)
{
int q=*(p+j*3);//HSV间隔排列,现取H的地址
if (!(((q>0)&&(q<8)) || (q>120)&&(q<180)))
{
*(p+j*3)=0;
*(p+j*3+1)=0;
*(p+j*3+2)=0;
}
else
{
*(p+j*3+1)=255;
*(p+j*3+2)=220;
}
}
}
cvtColor(hsvImage,image,CV_HSV2BGR);
imshow("HSV",image);
waitKey(1);
}
return 0;
}
下图来自
OpenCV文档,BGR和HSV排列的原理是一样的
