转载请注明出处:http://blog.csdn.net/xiaowei_cqu/article/details/7522467
前段时间做了一个火灾检测的小程序,因为时间紧,实现的算法也简单。只用了两步处理:运动检测和颜色检测。日后还会再改进~
运动检测
其实就是检测背景,对背景建模然后提取前景中运动的物体作为候选火灾样本。尝试了两种简单的背景算法:高斯背景建模和背景相减,还是背景相减的效果较好。以下是代码:
//背景相减
void FireDetector:: CheckFireMove(IplImage *pImgFrame/*, IplImage* pInitBackground, IplImage *pImgMotion*/)
{
int thresh_low = 80;//30
cvCvtColor(pImgFrame, pImgMotion, CV_BGR2GRAY);
cvConvert(pImgMotion, pMatFrame);
cvConvert(pImgMotion, pMatProcessed);
cvConvert(pImgBackground, pMatBackground);
cvSmooth(pMatFrame, pMatFrame, CV_GAUSSIAN, 3, 0, 0);
//计算两幅图的差的绝对值
cvAbsDiff(pMatFrame, pMatBackground, pMatProcessed);
//cvConvert(pMatProcessed,pImgProcessed);
//cvThresholdBidirection(pImgProcessed,thresh_low);
//对