原创文章,欢迎转载,转载请注明出处

前面进行了彩色的模糊处理,我们对黑白图片进行同样的平滑处理,看看效果。
首先是需要创建黑白图片,我对opencv的各种函数还不是很熟悉,我们可以先用熟悉的创建单通道的图片。

 IplImage* img = cvCreateImage(cvSize(, ), IPL_DEPTH_8U,);  
 创建一张300*300pixel大小的图片,然后我们需要对像素进行操作,让图片编程全黑,然后让中心像素为白。
 对像素的操作也有不少方法,我们用简单暴力的。

IplImage结构体里面有一个imageData成员,它是指向图像数据的指针,可以通过它直接读写像素。
代码如下:

     uchar *data;
data = (uchar *)img->imageData;
for(i = ; i <img->width; i++)
{
for (j = ; j< img->height; j++)
{
//data[i*img->widthStep+j] = 0;
CV_IMAGE_ELEM(img, unsigned char, i, j) = ;
}
}

这个很容易理解,就是用一个uchar的指针指向图像数据,然后计算偏移量,然后控制对像素的读写,我们这里偷懒了,用了数组方式的访问,其实和起始地址加偏移量是一样的哈。
可以发现,我们没有用 data[i*img->widthStep+j] = 0;,而是用了CV_IMAGE_ELEM(img, unsigned char, i, j) = 0; CV_IMAGE_ELEM是一个宏,它里面帮我们封装了下,用起来也挺简单的,所以就用它了,其定义在types_c.h里面,它的宏定义如下:

 /* get reference to pixel at (col,row),
for multi-channel images (col) should be multiplied by number of channels */
#define CV_IMAGE_ELEM( image, elemtype, row, col ) \
(((elemtype*)((image)->imageData + (image)->widthStep*(row)))[(col)])

这个就不解释了,很容易理解的。接下来就是把中心点设置成白色了,直接套用宏。

 CV_IMAGE_ELEM(img, unsigned char, img->width/, img->height/) = ;

接下来就用上一节的代码smooth下就好了,
先看看5*5高斯滤波和9*9高斯滤波的效果。如下图,从左到右依次为原图,5*5,9*9

下面我们看看5*5两次和一次9*9效果对比,从左到右依次为原图,5*5两次和9*9

第一眼看上去觉得他们5*5两次和9*9没smooth后的效果差不多,但是实际呢?我们把中心点smooth后的数值答应出来了,在上图的最右边,可以看到原图中心点是255,5*5一次后是36,两次后是19,9*9一次就是14了。。
看点效果不明显,我们把上面的白点变成白面,然后再算一次,

OpenCV学习 6:平滑滤波器 cvSmooth()——2的更多相关文章

  1. OpenCV 学习笔记 02 使用opencv处理图像

    1 不同色彩空间的转换 opencv 中有数百种关于不同色彩空间的转换方法,但常用的有三种色彩空间:灰度.BRG.HSV(Hue-Saturation-Value) 灰度 - 灰度色彩空间是通过去除彩 ...

  2. opencv学习笔记(七)SVM+HOG

    opencv学习笔记(七)SVM+HOG 一.简介 方向梯度直方图(Histogram of Oriented Gradient,HOG)特征是一种在计算机视觉和图像处理中用来进行物体检测的特征描述子 ...

  3. opencv学习笔记(六)直方图比较图片相似度

    opencv学习笔记(六)直方图比较图片相似度 opencv提供了API来比较图片的相似程度,使我们很简单的就能对2个图片进行比较,这就是直方图的比较,直方图英文是histogram, 原理就是就是将 ...

  4. opencv学习笔记(五)镜像对称

    opencv学习笔记(五)镜像对称 设图像的宽度为width,长度为height.(x,y)为变换后的坐标,(x0,y0)为原图像的坐标. 水平镜像变换: 代码实现: #include <ios ...

  5. opencv学习笔记(四)投影

    opencv学习笔记(四)投影 任选了一张图片用于测试,图片如下所示: #include <cv.h> #include <highgui.h> using namespace ...

  6. opencv学习笔记(三)基本数据类型

    opencv学习笔记(三)基本数据类型 类:DataType 将C++数据类型转换为对应的opencv数据类型 OpenCV原始数据类型的特征模版.OpenCV的原始数据类型包括unsigned ch ...

  7. opencv学习笔记(二)寻找轮廓

    opencv学习笔记(二)寻找轮廓 opencv中使用findContours函数来查找轮廓,这个函数的原型为: void findContours(InputOutputArray image, O ...

  8. opencv学习笔记(一)IplImage, CvMat, Mat 的关系

    opencv学习笔记(一)IplImage, CvMat, Mat 的关系 opencv中常见的与图像操作有关的数据容器有Mat,cvMat和IplImage,这三种类型都可以代表和显示图像,但是,M ...

  9. paper 93:OpenCV学习笔记大集锦

    整理了我所了解的有关OpenCV的学习笔记.原理分析.使用例程等相关的博文.排序不分先后,随机整理的.如果有好的资源,也欢迎介绍和分享. 1:OpenCV学习笔记 作者:CSDN数量:55篇博文网址: ...

  10. (转) OpenCV学习笔记大集锦 与 图像视觉博客资源2之MIT斯坦福CMU

          首页 视界智尚 算法技术 每日技术 来打我呀 注册     OpenCV学习笔记大集锦 整理了我所了解的有关OpenCV的学习笔记.原理分析.使用例程等相关的博文.排序不分先后,随机整理的 ...

随机推荐

  1. Gradle中文乱码

    代码中的中文注释可能会引起Gradle报错 解决办法: 在项目下的build.gradle下添加以下代码即可解决 [java] view plaincopyprint? tasks.withType( ...

  2. EOFError:EOF when reading a line

    Sublime2编译Python程序EOFError:EOF when reading a line: 是因为Sublime2对于python中运行含有input或者raw_input的python代 ...

  3. Javascript 链式运动框架——逐行分析代码,让你轻松了解运动的原理

    所谓链式运动,就是一环扣一环.我们的很多运动实际上来说指的就是分阶段的,第一个阶段动完,下个阶段开始动. 这个链式运动框架就是用来处理这些问题的. 我们先来看下之前的运动框架,以下是Javascrip ...

  4. Android Studio中如何创建AIDL

    实现客户端添加Book,Service接收并打印出书籍信息 一.创建Book类 1.创建文件夹(本文命名为aidl) 2.创建Book类并继承Parcelable接口(原因:AIDL只能传送继承Par ...

  5. Java 集合嵌套List of List

    在LeetCode上遇到这样返回值 public class Solution { public List<List<Integer>> levelOrder(TreeNode ...

  6. 安卓linearlayout布局的一个嵌套实例

    XML代码如下 <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:andr ...

  7. JavaScript学习之—prototype

    一.利用prototype扩展String方法,去除字符前后空格: String.prototype.trim = function String$trim() { if (arguments.len ...

  8. 浅析document.createDocumentFragment()与js效率

    对于循环批量操作页面的DOM有很大帮助!利用文档碎片处理,然后一次性append,并且使用原生的javascript语句操作 document.createDocumentFragment()说白了就 ...

  9. Oracle字符编码

    .检查服务器编码: 执行SQL语法: Java代码 select * from v$nls_parameters; 或 Java代码 select * from nls_database_parame ...

  10. perl 继承写法

    use base (Critter); 和 BEGIN{ require Critter; @ISA=qw/Critter/; } 这两种写法是等价