资源简介
具体描述看我博客。2、 具体的操作方法:将原图像进行RGB三通道分离,去取各个通道像素的值,根据实验得出的经验,对火灾像素定规则,规定各个分量之间的关系。根据这个规则对输入图像进行判断,创建一个新的图像,符合就在这个新的图像中保存火灾像素的位置,否则不保存(如图所示);将创建的二值图像进行检测轮廓,根据轮廓组数进行火灾识别框的绘制,最后输出结果图像。
代码片段和文件信息
#include
#include
#include
using namespace cv;
using namespace std;
void DrawFire(Mat &inputImg Mat foreImg)
{
vector> contours_set;//保存轮廓提取后的点集及拓扑关系
findContours(foreImg contours_set CV_RETR_EXTERNAL CV_CHAIN_APPROX_NONE);//CV_CHAIN_APPROX_NONE获取轮廓上所有像素点
vector >::iterator iter = contours_set.begin();//iterator迭代器
for (; iter != contours_set.end();)
{
Rect rect = boundingRect(*iter);//1、计算*iter点集的矩形 获取包含点集对象的垂直矩阵
if (rect.area()> 0)
{
rectangle(inputImg rect Scalar(0 255 0));//2、1和2共同构成点集对象的垂直矩阵
++iter;
}
else
{
iter = contours_set.erase(iter);
}
}
namedWindow(“showFire“);
imshow(“showFire“ inputImg);
imwrite(“火焰识别.jpg“ inputImg);
waitKey(0);
}
Mat CheckColor(Mat &inImg)
{
Mat fireImg;
fireImg.create(inImg.size() CV_8UC1);
int redThre = 115; // 115~135
int saturationTh = 45; //55~65
Mat multiRGB[3];
int a = inImg.channels();
split(inImg multiRGB); //将图片拆分成RGB三通道的颜色
for (int i = 0; i < inImg.rows; i++)
{
for (int j = 0; j < inImg.cols; j++)
{
float B G R;
B = multiRGB[0].at(i j); //每个像素的RGB值
G = multiRGB[1].at(i j);
R = multiRGB[2].at(i j);
int maxValue = max(max(B G) R);
int minValue = min(min(B G) R);
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 >0.20 && S >((255 - R) * saturationTh / redThre))
{
fireImg.at(i j) = 255;
}
else
{
fireImg.at(i j) = 0;
}
}
}
dilate(fireImg fireImg Mat(5 5 CV_8UC1));
imshow(“fire“ fireImg);
imwrite(“火焰像素点.jpg“ fireImg);
waitKey(0);
DrawFire(inImg fireImg);
return fireImg;
}
int main()
{ //主函数
Mat inputImg = imread(“2.jpg“);
CheckColor(inputImg);
return 0;
}
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
文件 114176 2017-10-06 17:36 火灾识别代码精简精炼\Debug\火灾识别代码精简精炼.exe
文件 559280 2017-10-06 17:36 火灾识别代码精简精炼\Debug\火灾识别代码精简精炼.ilk
文件 1846272 2017-10-06 17:36 火灾识别代码精简精炼\Debug\火灾识别代码精简精炼.pdb
文件 70368 2017-10-05 13:46 火灾识别代码精简精炼\火灾识别代码精简精炼\2.jpg
文件 576512 2017-10-06 17:36 火灾识别代码精简精炼\火灾识别代码精简精炼\Debug\vc120.idb
文件 1372160 2017-10-06 17:36 火灾识别代码精简精炼\火灾识别代码精简精炼\Debug\vc120.pdb
文件 501864 2017-10-06 17:36 火灾识别代码精简精炼\火灾识别代码精简精炼\Debug\源.obj
文件 2397 2017-10-06 17:36 火灾识别代码精简精炼\火灾识别代码精简精炼\Debug\火灾识别代码精简精炼.log
文件 608 2017-10-06 17:36 火灾识别代码精简精炼\火灾识别代码精简精炼\Debug\火灾识别代码精简精炼.tlog\cl.command.1.tlog
文件 9566 2017-10-06 17:36 火灾识别代码精简精炼\火灾识别代码精简精炼\Debug\火灾识别代码精简精炼.tlog\CL.read.1.tlog
文件 408 2017-10-06 17:36 火灾识别代码精简精炼\火灾识别代码精简精炼\Debug\火灾识别代码精简精炼.tlog\CL.write.1.tlog
文件 1920 2017-10-06 17:36 火灾识别代码精简精炼\火灾识别代码精简精炼\Debug\火灾识别代码精简精炼.tlog\li
文件 4944 2017-10-06 17:36 火灾识别代码精简精炼\火灾识别代码精简精炼\Debug\火灾识别代码精简精炼.tlog\li
文件 392 2017-10-06 17:36 火灾识别代码精简精炼\火灾识别代码精简精炼\Debug\火灾识别代码精简精炼.tlog\li
文件 179 2017-10-06 17:36 火灾识别代码精简精炼\火灾识别代码精简精炼\Debug\火灾识别代码精简精炼.tlog\火灾识别代码精简精炼.lastbuildstate
文件 2063 2017-10-06 16:26 火灾识别代码精简精炼\火灾识别代码精简精炼\源.cpp
文件 4106 2017-10-06 17:36 火灾识别代码精简精炼\火灾识别代码精简精炼\火灾识别代码精简精炼.vcxproj
文件 944 2017-10-06 17:36 火灾识别代码精简精炼\火灾识别代码精简精炼\火灾识别代码精简精炼.vcxproj.filters
文件 55956 2017-10-06 17:36 火灾识别代码精简精炼\火灾识别代码精简精炼\火焰像素点.jpg
文件 139759 2017-10-06 17:37 火灾识别代码精简精炼\火灾识别代码精简精炼\火焰识别.jpg
文件 13434880 2017-10-06 17:37 火灾识别代码精简精炼\火灾识别代码精简精炼.sdf
文件 1036 2017-10-06 16:17 火灾识别代码精简精炼\火灾识别代码精简精炼.sln
..A..H. 21504 2017-10-06 17:37 火灾识别代码精简精炼\火灾识别代码精简精炼.v12.suo
目录 0 2017-10-06 17:36 火灾识别代码精简精炼\火灾识别代码精简精炼\Debug\火灾识别代码精简精炼.tlog
目录 0 2017-10-06 17:36 火灾识别代码精简精炼\火灾识别代码精简精炼\Debug
目录 0 2017-10-06 17:36 火灾识别代码精简精炼\Debug
目录 0 2017-10-06 17:37 火灾识别代码精简精炼\火灾识别代码精简精炼
目录 0 2017-10-06 17:37 火灾识别代码精简精炼
----------- --------- ---------- ----- ----
18721294 28
............此处省略1个文件信息
评论
共有 条评论