博主最近在做一个基于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等。

(二)形态学处理
形态学是一种强大的图像处理工具,它可以实现图像去噪、图像分割等功能。由形态学的两个简单操作:腐蚀与膨胀可以衍生出很多强大的形态学算法,实现我们想要的功能。形态学处理一般作用在二值图像中,有一些情况下也会作用在灰度图像中。在图像去噪方面,最常用的形态学算法是形态学开操作(Open)和形态学闭操作(Close),以及它们相结合的开-闭去噪算法。
在OpenCV1.0中有那么一些形态学处理函数:
①腐蚀
void cvErode(
IplImage* src,
IplImage* dst,
IplConvkernel* B = NULL,
int iterations = 1
);
②膨胀
void cvDilate(
IplImage* src,
IplImage* dst,
IplConvkernel* B = NULL,
int iterations = 1
);
其中,src为输入图像;dst为输出图像;B为结构元(SE),默认为3*3参考点在中心的正方形;interations为迭代次数,默认为1次。
③自定义结构元
IplConvKernel* cvCreateStructingElementEx(
int cols,
int rows,
int anchor_x,
int anchor_y,
int shape,
int* values = NULL
);
若用户对默认的结构元不满意,则可以用上面的函数自定义一个适当的结构元。其中cols和rows分别代表结构元的行数和列数;anchor_x和anchor_y分别代表结构元的参考点的横和列坐标;shape可以是矩形(CV_SHAPE_RECT)、十字交叉形(CV_SHAPE_CROSS)、椭圆形(CV_SHAPE_ELLIPSE)、用户自定义结构元里面的数值(values)(CV_SHAPE_CUSTOM)。
④更通用的形态学函数
void cvMorphologyEx(
const CvArr* src,
CvArr* dst,
CvArr* temp,
IplConvKernel* element,
int operation,
int iterations = 1
)
其中,src为输入图像;dst为输出图像;element为结构元(SE);interations为迭代次数,默认为1次;operation可以是
开操作(CV_MOP_OPEN,不需要t输入temp)、
闭操作(CV_MOP_CLOSE,不需要输入temp)、
形态梯度(CV_MOP_GRADIENT,总是需要temp)、
顶帽操作(CV_MOP_TOPHAT,当src和dst相同时需要输入temp)、
底帽操作(CV_MOP_BLACKHAT,当src和dst相同时需要输入temp)。

(三)总结
本文介绍了在火焰检测时候用到的两种图像预处理方法——平滑滤波和形态学处理,博主假设读者有基本的图像处理知识,
所以并没有很详细地介绍它们的效果和原理,如果读者想深入了解这些技术,可以查阅其他资料或者在评论下面提出,博主
一定尽快回复~本文的每一个字都是博主手打出来的,所以内容并不是很多%>_<%,第一次写的博文写得不好的话大家请原
谅~还有大家想学习什么图像处理基本知识也可以在评论上提出,如果在博主的知识范围内,那么就考虑写一下~好吧,我们
下次见~
下文预告:基于OpenCV的火焰检测(二)——RGB颜色判据

基于OpenCV的火焰检测(一)——图像预处理的更多相关文章

  1. 基于OpenCV的火焰检测(二)——RGB颜色判据

    上文跟大家分享了在做火焰检测中常用到的图像预处理方法,从这一篇博文开始,我将向大家介绍如何一步一步地检测出火焰区域.火焰提取要用 到很多判据,今天我要向大家介绍的是最简单的但是很有效的判据--RGB判 ...

  2. 基于OpenCV的火焰检测(三)——HSI颜色判据

    上文向大家介绍了如何用最简单的RGB判据来初步提取火焰区域,现在我要给大家分享的是一种更加直观的判据--HSI判据. 为什么说HSI判据是更加直观的判据呢?老规矩,先介绍一下HSI色彩模型: HSI颜 ...

  3. Python图像处理丨基于OpenCV和像素处理的图像灰度化处理

    摘要:本篇文章讲解图像灰度化处理的知识,结合OpenCV调用cv2.cvtColor()函数实现图像灰度操作,使用像素处理方法对图像进行灰度化处理. 本文分享自华为云社区<[Python图像处理 ...

  4. 基于OpenCv的人脸检测、识别系统学习制作笔记之一

    基于OpenCv从视频文件到摄像头的人脸检测 在OpenCv中读取视频文件和读取摄像头的的视频流然后在放在一个窗口中显示结果其实是类似的一个实现过程. 先创建一个指向CvCapture结构的指针 Cv ...

  5. 【AdaBoost算法】基于OpenCV实现人脸检测Demo

    一.关于检测算法 分类器训练: 通过正样本与负样本训练可得到分类器,opencv有编译好的训练Demo,按要求训练即可生成,这里我们直接使用其已经训练好的分类器检测: 检测过程: 检测过程很简单,可以 ...

  6. OpenCV特征点检测匹配图像-----添加包围盒

    最终效果: 其实这个小功能非常有用,甚至加上只有给人感觉好像人脸检测,目标检测直接成了demo了,主要代码如下: // localize the object std::vector<Point ...

  7. 基于OpenCv的人脸检测、识别系统学习制作笔记之三

    1.在windows下编写人脸检测.识别系统.目前已完成:可利用摄像头提取图像,并将人脸检测出来,未进行识别. 2.在linux下进行编译在windows环境下已经能运行的代码. 为此进行了linux ...

  8. 基于Opencv的人脸检测及识别

    一.实验目的:我这里完成的是,将8张人脸图片(4组,每组两张)存入库中,选取1张图片,程序识别出与其匹配的另一张. 这里介绍分三个步骤完成该工作,①程序读取摄像头.拍照 ②程序从电脑文档中读取图片   ...

  9. 基于OpenCv的人脸检测、识别系统学习制作笔记之二

    在网上找到了一个博客,里面有大量内容适合初学者接触和了解人脸检测的博文,正好符合我目前的学习方面,故将链接放上来,后续将分类原博客的博文并加上学习笔记. 传送门: http://blog.sina.c ...

随机推荐

  1. Nginx location指令匹配顺序规则

    location匹配命令 1. “= ”,字面精确匹配, 如果匹配,则跳出匹配过程.(不再进行正则匹配) 2. “^~ ”,最大前缀匹配,如果匹配,则跳出匹配过程.(不再进行正则匹配) 3. 不带任何 ...

  2. vue-router scrollBehavior无效的问题及解决方案

    在使用vue做单页面应用开发时候 使用vue-router作为路由控制器  在使用过程中发现每个页面打开都在原来的位置 不能返回到页面顶部位置 ,然后查看api文档 滚动行为  发现如下代码: con ...

  3. HBase学习1(hbase基础)

    认识NoSQL NoSQL:泛指非关系数据库(Not only SQL) NoSQL两重要特征:使用硬盘和把随机存储器作为存储载体 NoSQL分类(按照存储格式) 1)键值(Key-Value)存储数 ...

  4. JavaScript -- 操作input CheckBox 全选框

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  5. 初探MyBatis之HelloWorld(三)

    三.用SQL映射语句用注解,dataSource用xml(不推荐). 综合上面两节(一个用xml,一个用annotation),发现一个好玩儿的,SQL映射用注解方式,然后还是得有两个xml配置文件. ...

  6. html5学习(新增元素)

    来源于<实战html5>contenteditable 规定是否可编辑元素的内容 css3圆角 border-radius旋转变换 transform:rotate(); 变换 trans ...

  7. Linux下Apache的安装与配置

    本文安装的httpd版本为httpd 2.4.4安装之前确保 Development Libraries与Development tools安装上.安装方法参考:http://www.linuxidc ...

  8. WPF利用通过父控件属性来获得绑定数据源RelativeSource

    WPF利用通过父控件属性来获得绑定数据源RelativeSource   有时候我们不确定作为数据源的对象叫什么名字,但知道作为绑定源与UI布局有相对的关系,如下是一段XAML代码,说明多层布局控件中 ...

  9. js执行环境、作用域

    js执行环境.作用域 执行环境:是javascript中的一个重要的概念,<javascript高级程序设计第三版>的定义是:执行环境定义了变量或函数有权访问的其他数据,决定了他们各自的行 ...

  10. CATransform3D 矩阵变换之立方体旋转实现细节 (转)

    原文地址 http://blog.csdn.net/ch_soft/article/details/7351896 第一部分.前几天做动画,使用到了CATransform3D ,由于没有学过计算机图形 ...