資源簡介
主要完成兩個視頻中火焰的檢測,主要結合RGB判據和HIS判據,設定合適的閾值條件,檢測出火焰對應像素的區域,將原圖二值化,經過中值濾波以及數學形態學的膨脹運算等圖像處理,消除一些噪聲及離散點,連通一些遺漏的區域。基于OpenCV的開源庫,在VS2013平臺上,實現了兩個視頻中火焰的檢測。
利用OpenCV有強大的圖像處理庫,直接將圖像分離為RGB三通道,設置條件限制,找到火焰的像素位置,將原圖處理成二值圖像。對于火焰檢測,本文結合RGB判據和HIS判據,分割出火焰的區域。
代碼片段和文件信息
#include
#include
using?namespace?cv;
int?redThre?=49;?//?115~135??
int?saturationTh?=?7;?//55~65??
Mat?CheckColor(Mat?&inImg);
void?DrawFire(Mat?&inputImg?Mat?foreImg);
int?main()
{
VideoCapture?capture(“test1.avi“);
//VideoCapture?capture(0);
????
while?(1)
{
Mat?frame;
capture?>>?frame;
if?(frame.empty())
break;
namedWindow(“Control“?CV_WINDOW_AUTOSIZE);
cvCreateTrackbar(“redThre“?“Control“?&redThre?255);?
cvCreateTrackbar(“saturationTh“?“Control“?&saturationTh?255);?
CheckColor(frame);
waitKey(1);
}
return?0;
}
?
//The?Color?Check?is?According?to?“An?Early?Fire-Detection?Method?based?on?Image?Processing“??
//The?Author?is:Thou-Ho?(Chao-Ho)?Chen?Ping-Hsueh?Wu?and?Yung-Chuen?Chiou??
?
Mat?CheckColor(Mat?&inImg)
{
Mat?fireImg;
fireImg.create(inImg.size()?CV_8UC1);
Mat?multiRGB[3];
int?a?=?inImg.channels();
split(inImg?multiRGB);?//將圖片拆分成RGB三通道的顏色??
for?(int?i?=?0;?i? {
for?(int?j?=?0;?j? {
float?B?G?R;
B?=?multiRGB[0].at(i?j);?//每個像素的RGB值動態地址計算法??
G?=?multiRGB[1].at(i?j);
R?=?multiRGB[2].at(i?j);
float?maxValue?=?max(max(B?G)?R);
float?minValue?=?min(min(B?G)?R);
//與HSI中S分量的計算公式
double?S?=?(1?-?3.0*minValue?/?(R?+?G?+?B));//
//R?>?RT??R>=G>=B??S>=((255-R)*ST/RT)??
if?(R?>?redThre?&&R?>=?G?&&?G>=?B?&&?S?>((255?-?R)?*?saturationTh?/?redThre))
{
fireImg.at(i?j)?=?255;
}
else
{
fireImg.at(i?j)?=?0;
}
}
}
//erode(fireImg?fireImg?Mat(3?3?CV_8UC1));
//GaussianBlur(fireImg?fireImg?Size(5?5)?0?0);
medianBlur(fireImg?fireImg?5);
dilate(fireImg?fireImg?Mat(5?5?CV_8UC1));
????imshow(“Binary“?fireImg);
DrawFire(inImg?fireImg);
return?fireImg;
}
void?DrawFire(Mat?&inputImg?Mat?foreImg)
{
vector>?contours_set;//保存輪廓提取后的點集及拓撲關系??
findContours(foreImg?contours_set?CV_RETR_EXTERNAL?CV_CHAIN_APPROX_NONE);
Point?point1;
Point?point2;
float?a?=?0.4?b?=?0.75;
float?xmin1?=?a*inputImg.cols?ymin1?=?inputImg.rows?xmax1?=?0?ymax1?=?0;
float?xmin2?=?b*inputImg.cols?ymin2?=?inputImg.rows?xmax2?=?a*inputImg.cols?ymax2?=?0;
float?xmin3?=?inputImg.cols?ymin3?=?inputImg.rows?xmax3?=?b*inputImg.cols?ymax3?=?0;
Rect?finalRect1;
Rect?finalRect2;
Rect?finalRect3;
vector?>::iterator?iter?=?contours_set.begin();
for?(;?iter?!=?contours_set.end();)
{
Rect?rect?=?boundingRect(*iter);
float?radius;
Point2f?center;
minEnclosingCircle(*iter?center?radius);
if?(rect.area()>?0)
{
point1.x?=?rect.x;
point1.y?=?rect.y;
point2.x?=?point1.x?+?rect.width;
point2.y?=?point1.y?+?rect.height;
if?(point2.x {
if?(point1.x? xmin1?=?point1.x;
if?(point1.y? ymin1?=?point1.y;
if?(point2.x?>?xmax1?&&?point2.x? xmax1?=?point2.x;
if?(point2.y?>?ymax1)
ymax1?=?poin
?屬性????????????大小?????日期????時間???名稱
-----------?---------??----------?-----??----
?????目錄???????????0??2017-10-17?08:42??火焰檢測識別\
?????目錄???????????0??2017-10-17?08:42??火焰檢測識別\Debug\
?????文件???????90624??2017-09-19?08:30??火焰檢測識別\Debug\火焰檢測識別_1.exe
?????文件??????912420??2017-09-19?08:30??火焰檢測識別\Debug\火焰檢測識別_1.ilk
?????文件?????2010112??2017-09-19?08:30??火焰檢測識別\Debug\火焰檢測識別_1.pdb
?????目錄???????????0??2017-10-17?08:42??火焰檢測識別\ipch\
?????目錄???????????0??2017-10-17?08:42??火焰檢測識別\ipch\火焰檢測識別_1-2e9c887\
?????文件????63242240??2017-09-19?08:30??火焰檢測識別\ipch\火焰檢測識別_1-2e9c887\火焰檢測識別_1-552d6f73.ipch
?????目錄???????????0??2017-10-17?08:42??火焰檢測識別\火焰檢測識別_1\
?????目錄???????????0??2017-10-17?08:42??火焰檢測識別\火焰檢測識別_1\Debug\
?????文件???????21076??2017-09-19?08:30??火焰檢測識別\火焰檢測識別_1\Debug\CL.read.1.tlog
?????文件?????????414??2017-09-19?08:30??火焰檢測識別\火焰檢測識別_1\Debug\CL.write.1.tlog
?????文件?????????702??2017-09-19?08:30??火焰檢測識別\火焰檢測識別_1\Debug\cl.command.1.tlog
?????文件???????????2??2017-09-19?08:30??火焰檢測識別\火焰檢測識別_1\Debug\li
?????文件???????????2??2017-09-19?08:30??火焰檢測識別\火焰檢測識別_1\Debug\li
?????文件???????????2??2017-09-19?08:30??火焰檢測識別\火焰檢測識別_1\Debug\li
?????文件???????????2??2017-09-19?08:30??火焰檢測識別\火焰檢測識別_1\Debug\li
?????文件???????????2??2017-09-19?08:30??火焰檢測識別\火焰檢測識別_1\Debug\li
?????文件???????????2??2017-09-19?08:30??火焰檢測識別\火焰檢測識別_1\Debug\li
?????文件????????3252??2017-09-19?08:30??火焰檢測識別\火焰檢測識別_1\Debug\li
?????文件????????7210??2017-09-19?08:30??火焰檢測識別\火焰檢測識別_1\Debug\li
?????文件?????????910??2017-09-19?08:30??火焰檢測識別\火焰檢測識別_1\Debug\li
?????文件??????380168??2017-09-19?08:30??火焰檢測識別\火焰檢測識別_1\Debug\main.obj
?????文件?????????420??2017-09-19?08:30??火焰檢測識別\火焰檢測識別_1\Debug\mt.command.1.tlog
?????文件?????????374??2017-09-19?08:30??火焰檢測識別\火焰檢測識別_1\Debug\mt.read.1.tlog
?????文件?????????374??2017-09-19?08:30??火焰檢測識別\火焰檢測識別_1\Debug\mt.write.1.tlog
?????文件?????????594??2017-09-15?15:36??火焰檢測識別\火焰檢測識別_1\Debug\rc.command.1.tlog
?????文件?????????346??2017-09-15?15:36??火焰檢測識別\火焰檢測識別_1\Debug\rc.read.1.tlog
?????文件?????????354??2017-09-15?15:36??火焰檢測識別\火焰檢測識別_1\Debug\rc.write.1.tlog
?????文件??????625664??2017-09-19?08:30??火焰檢測識別\火焰檢測識別_1\Debug\vc100.idb
?????文件?????1200128??2017-09-19?08:30??火焰檢測識別\火焰檢測識別_1\Debug\vc100.pdb
............此處省略18個文件信息
評論
共有 條評論