步骤:
1先读取视频(or图片)文件
2将图像转换为hsv
3通过判断hsv值范围识别颜色
hsv范围颜色对应:https://blog.csdn.net/taily_duan/article/details/51506776
示例:识别视频中的黄色区域,并变成白色显示
#include <iostream>
#include <opencv2\opencv.hpp>
using namespace cv;
using namespace std;
int H, S, V;
void GetHSV(Mat &image, int div = 64) {
int nl = image.rows; //行数
int nc = image.cols; //列数
for (int j = 0; j < nl; j++)
{
for (int i = 0; i < nc; i++)
{
//-------------开始处理每个像素-------------------
H=image.at<Vec3b>(j, i)[0];
S=image.at<Vec3b>(j, i)[1];
V=image.at<Vec3b>(j, i)[2];
//cout << "H=" << H << "S=" << S << "V=" << V << endl;
if ((H >= 11) && (H <= 34) && (S >= 43) && (S <= 255) && (V >= 46) && (V <= 255))//检测黄色
{
image.at<Vec3b>(j, i)[0] = 0;
image.at<Vec3b>(j, i)[1] = 0;
image.at<Vec3b>(j, i)[2] = 255;
}
//-------------结束像素处理------------------------
} //单行处理结束
}
}
int main()
{
VideoCapture capture(0);
//【2】循环显示每一帧
while (1)
{
Mat frame,hsv; //定义一个Mat变量,用于存储每一帧的图像
char input;
capture >> frame; //读取当前帧
cvtColor(frame, hsv, COLOR_BGR2HSV);
GetHSV(hsv);
cvtColor(hsv, hsv, CV_HSV2BGR);
cv::namedWindow("原图", CV_WINDOW_NORMAL);
cv::namedWindow("转换图", CV_WINDOW_NORMAL);
imshow("转换图", hsv); //显示当前帧
imshow("原图", frame); //显示当前帧
input = waitKey(100);
if (input == 'q')
{
return 0;
}
}
return 0;
}
效果图: