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

效果圖:

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