欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

基于opencv實(shí)現(xiàn)視頻中的顏色識(shí)別功能

 更新時(shí)間:2022年07月22日 16:11:50   作者:chenguanging080  
這篇文章主要介紹了基于opencv實(shí)現(xiàn)視頻中的顏色識(shí)別功能,文章詳細(xì)介紹了顏色識(shí)別的原理及opencv中的顏色模型,基于c++代碼實(shí)現(xiàn)顏色識(shí)別功能,需要的朋友可以參考下

顏色識(shí)別的原理

opencv中的顏色模型

RGB

RGB具有三個(gè)通道其,分別表示紅色通道®,綠色通道(G),藍(lán)色通道(B),3個(gè)通道在opencv中的取值均為0~255,它的顏色由3個(gè)通道的取值來(lái)共同決定,因此如果使用RGB圖像來(lái)進(jìn)行顏色的識(shí)別,會(huì)丟失很多的顏色。

HSV

HSV具有三個(gè)通道,其分別表示色調(diào)(H),飽和度(S),亮度(V),3個(gè)通道在opencv中的取值分別如下:

  • H:0~180
  • S:0~255
  • V:0~255

其中H通道和S通道決定了顏色,V通道決定亮度
各種顏色對(duì)應(yīng)的三個(gè)通道的取值表如下:

在這里插入圖片描述

因此通過(guò)限制HSV通道中相對(duì)應(yīng)的數(shù)值,就可以識(shí)別出對(duì)應(yīng)的顏色

顏色識(shí)別的實(shí)現(xiàn)(c++)

1.讀取攝像頭的實(shí)時(shí)畫(huà)面

VideoCapture capture(1);//0為電腦本身攝像頭,1位外置攝像頭

2.讀取攝像頭的當(dāng)前一幀的數(shù)據(jù)并轉(zhuǎn)換到HSV空間

capture >> frame; //讀取當(dāng)前幀
cvtColor(frame, imgHSV, COLOR_BGR2HSV);

3.對(duì)HSV圖像進(jìn)行直方圖均衡化
在此處使用直方圖均衡化是因?yàn)榭梢允褂眠@種方法可以使原來(lái)比較少像素的灰度會(huì)被分配到別的灰度去,像素相對(duì)集中, 處理后灰度范圍變大,對(duì)比度變大,清晰度變大,所以能有效增強(qiáng)圖像。

split(imgHSV,temporary);
equalizeHist(temporary[2], temporary[2]);
merge(temporary, imgHSV);   //將HSV圖像分割通道,并且做直方圖的均衡化

使用equalizeHist()函數(shù),其輸入必須是單通道的,因此使用split函數(shù)將得到的HSV圖像分割為三個(gè)通道之后,在進(jìn)行直方圖均衡化,然后再使用merge函數(shù)來(lái)合并三個(gè)通道。
此處僅對(duì)V通道進(jìn)行了直方圖均衡化,因?yàn)橥ㄟ^(guò)比對(duì)發(fā)現(xiàn)只對(duì)V通道進(jìn)行效果最好,具體的原因還不清楚。

4.將直方圖均衡化之后,使用inRange()函數(shù)來(lái)進(jìn)行圖像的識(shí)別

inRange(imgHSV, Scalar(H_W_L, S_W_L, V_W_L), Scalar(H_W_H, S_W_H, V_W_H), image);

其中H_W_L,H_W_L, S_W_L, V_W_L. . . 等數(shù)值分別為前面表格對(duì)應(yīng)的顏色值的最小值和最大值。
此函數(shù)是將在范圍內(nèi)的像素值為255,其與為0,反映到圖像上就是,選中的顏色為白色,其與的均為黑色。
操作到此顏色可以進(jìn)行識(shí)別,但是效果可能不會(huì)很好,因此可以再使用開(kāi)操作來(lái)消除噪點(diǎn),去掉小的干擾快,再使用閉操作來(lái)填充閉合區(qū)域。

5.開(kāi)操作

kernel = getStructuringElement(MORPH_RECT, Size(3, 3));//3*3的矩形卷積核,只要是奇數(shù)的都可以
morphologyEx(image,image,2,kernel);

6.閉操作

morphologyEx(image,image,3,kernel);

源代碼

#include <opencv2\opencv.hpp>  
using namespace cv;
using namespace std;
int main()
{
	Mat frame,imgHSV,image,kernel;
	vector<Mat>temporary;
	int H_W_L = 0, H_W_H = 180;
	int S_W_L = 0, S_W_H = 30;
	int V_W_L = 221, V_W_H = 255;
	VideoCapture capture(1);//讀取視攝像頭實(shí)時(shí)畫(huà)面數(shù)據(jù),0默認(rèn)是筆記本的攝像頭;如果是外接攝像頭,這里改為1
	while (true)
	{
		capture >> frame; //讀取當(dāng)前幀
		
		if (!frame.empty())
		{          //判斷輸入的視頻幀是否為空的
			cvtColor(frame, imgHSV, COLOR_BGR2HSV);
			//threshold(gray, two_value, 125, 255, THRESH_BINARY);//二值圖像
			
			split(imgHSV,temporary);
			equalizeHist(temporary[2], temporary[2]);
			/*equalizeHist(temporary[1], temporary[1]);
			equalizeHist(temporary[0], temporary[0]);*/
			merge(temporary, imgHSV);   //將HSV圖像分割通道,并且做直方圖的均衡化
			inRange(imgHSV, Scalar(H_W_L, S_W_L, V_W_L), Scalar(H_W_H, S_W_H, V_W_H), image);
			kernel = getStructuringElement(MORPH_RECT, Size(3, 3));
			morphologyEx(image,image,2,kernel);
			morphologyEx(image,image,3,kernel);
			imshow("直方圖", imgHSV);
			imshow("原圖",frame);
			imshow("window", image);  //在window窗口顯示frame攝像頭數(shù)據(jù)畫(huà)面
		}
		if (waitKey(20) == 'q')   //延時(shí)20ms,獲取用戶是否按鍵的情況,如果按下q,會(huì)推出程序 
			break;
	}
	capture.release();     //釋放攝像頭資源
	destroyAllWindows();   //釋放全部窗口
	return 0;
}

##結(jié)果

在這里插入圖片描述

到此這篇關(guān)于基于opencv實(shí)現(xiàn)視頻中的顏色識(shí)別的文章就介紹到這了,更多相關(guān)OpenCV顏色識(shí)別內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • C語(yǔ)言深度解剖篇之關(guān)鍵字以及補(bǔ)充內(nèi)容

    C語(yǔ)言深度解剖篇之關(guān)鍵字以及補(bǔ)充內(nèi)容

    C語(yǔ)言的關(guān)鍵字共有32個(gè),根據(jù)關(guān)鍵字的作用,可分其為數(shù)據(jù)類(lèi)型關(guān)鍵字、控制語(yǔ)句關(guān)鍵字、存儲(chǔ)類(lèi)型關(guān)鍵字和其它關(guān)鍵字四類(lèi),這篇文章主要給大家介紹了關(guān)于C語(yǔ)言深度解剖篇之關(guān)鍵字以及補(bǔ)充內(nèi)容的相關(guān)資料,需要的朋友可以參考下
    2022-06-06
  • C語(yǔ)言打印輸出楊輝三角

    C語(yǔ)言打印輸出楊輝三角

    這篇文章主要為大家詳細(xì)介紹了C語(yǔ)言打印輸出楊輝三角,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2019-12-12
  • C++私有繼承(二)

    C++私有繼承(二)

    這篇文章主要介紹了C++私有繼承,在私有繼承時(shí),基類(lèi)的公有對(duì)象以及保護(hù)對(duì)象會(huì)變成派生類(lèi)的私有對(duì)象。我們可以在派生類(lèi)方法當(dāng)中使用它,但無(wú)法通過(guò)派生類(lèi)對(duì)象直接調(diào)用,但無(wú)法訪問(wèn)基類(lèi)的私有方法和對(duì)象,下面具體內(nèi)容,需要的朋友可以參考一下
    2022-01-01
  • C語(yǔ)言實(shí)現(xiàn)紅黑樹(shù)的實(shí)例代碼

    C語(yǔ)言實(shí)現(xiàn)紅黑樹(shù)的實(shí)例代碼

    這篇文章主要介紹了C語(yǔ)言實(shí)現(xiàn)紅黑樹(shù)的實(shí)例代碼,有需要的朋友可以參考一下
    2013-12-12
  • C語(yǔ)言二分查找算法及實(shí)現(xiàn)代碼

    C語(yǔ)言二分查找算法及實(shí)現(xiàn)代碼

    本文主要介紹C語(yǔ)言的二分查找算法,這里給大家詳細(xì)介紹了什么是二分查找,并提供代碼實(shí)例,需要的小伙伴可以參考下
    2016-07-07
  • C++動(dòng)態(tài)調(diào)用動(dòng)態(tài)鏈接庫(kù)(DLL或SO)的方法實(shí)現(xiàn)

    C++動(dòng)態(tài)調(diào)用動(dòng)態(tài)鏈接庫(kù)(DLL或SO)的方法實(shí)現(xiàn)

    動(dòng)態(tài)鏈接庫(kù)是一種Windows操作系統(tǒng)下常見(jiàn)的可執(zhí)行文件格式,它包含了一些可被其他應(yīng)用程序調(diào)用的函數(shù)和數(shù)據(jù),本文主要介紹了C++動(dòng)態(tài)調(diào)用動(dòng)態(tài)鏈接庫(kù)(DLL或SO),感興趣的可以了解一下
    2024-01-01
  • C++設(shè)計(jì)模式之享元模式

    C++設(shè)計(jì)模式之享元模式

    這篇文章主要介紹了C++設(shè)計(jì)模式之享元模式,本文講解了什么是享元模式、享元模式代碼實(shí)例、享元模式的優(yōu)點(diǎn)等內(nèi)容,需要的朋友可以參考下
    2014-10-10
  • 重構(gòu)-C++實(shí)現(xiàn)矩陣的簡(jiǎn)單實(shí)例

    重構(gòu)-C++實(shí)現(xiàn)矩陣的簡(jiǎn)單實(shí)例

    下面小編就為大家?guī)?lái)一篇重構(gòu)-C++實(shí)現(xiàn)矩陣的簡(jiǎn)單實(shí)例。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2016-06-06
  • 基于C++中覆蓋,重載,隱藏的一點(diǎn)重要說(shuō)明

    基于C++中覆蓋,重載,隱藏的一點(diǎn)重要說(shuō)明

    下面小編就為大家?guī)?lái)一篇基于C++中覆蓋,重載,隱藏的一點(diǎn)重要說(shuō)明。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2016-12-12
  • C語(yǔ)言中帶頭雙向循環(huán)鏈表基本操作的實(shí)現(xiàn)詳解

    C語(yǔ)言中帶頭雙向循環(huán)鏈表基本操作的實(shí)現(xiàn)詳解

    無(wú)頭單向非循環(huán)鏈表結(jié)構(gòu)簡(jiǎn)單,一般不會(huì)單獨(dú)用來(lái)存數(shù)據(jù)。而帶頭雙向循環(huán)鏈表的結(jié)構(gòu)較為復(fù)雜,一般用在單獨(dú)存儲(chǔ)數(shù)據(jù)。本文將介紹帶頭雙向循環(huán)鏈表的基本操作,需要的可以參考一下
    2022-11-11

最新評(píng)論