OPENCV实例:识别特定颜色的物体

步骤:

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;
}

效果图:

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章