博主最近在做一个基于OpenCV的火焰检测的项目,不仅可以检测图片中的火焰,还可以检测视频中的火焰,最后在视频检测的基础上推广到摄像头实时检测。在做这个项目的时候,博主参考了很多相关的文献,用了很多种不同的火焰判据,并将其进行不同组合,从而达到我们想要的检测效果。接下来的几篇博文将会详细介绍一些效果不错的火焰判据,在这之前,博主想先介绍一下在做项目的时候会常用到的一些图像预处理的方法。
常用的图像预处理是图像平滑和图像锐化。图像平滑一般用到的技术是均值滤波、中值滤波以及形态学处理,而图像锐化一般用到的技术是梯度算子或者拉普拉斯算子。在火焰检测中我们比较感兴趣的是图像平滑方面,因此本文将详细介绍图像平滑处理。
(一)平滑滤波
在OpenCV1.0中有那么一个平滑函数:
void cvSmooth(
const CvArr* src,
CvArr* dst,
int smoothtype = CV_GAUSSIAN,
int param1 = 3,
int param2 = 0,
double param3 = 0,
double param4 = 0
);
其中,src为输入图像或数组;dst为输出图像或数组;
smoothtype为平滑类型,有以下选项:
其中,最常用的平滑滤波类型有简单滤波、中值滤波和高斯滤波。高斯滤波一般与锐化算子结合构成图像边缘分割工具,如LoG、Canny等。