OpenCV学习 6:平滑滤波器 cvSmooth()——2
原创文章,欢迎转载,转载请注明出处
前面进行了彩色的模糊处理,我们对黑白图片进行同样的平滑处理,看看效果。
首先是需要创建黑白图片,我对opencv的各种函数还不是很熟悉,我们可以先用熟悉的创建单通道的图片。
IplImage* img = cvCreateImage(cvSize(, ), IPL_DEPTH_8U,);
对像素的操作也有不少方法,我们用简单暴力的。
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的更多相关文章
- OpenCV 学习笔记 02 使用opencv处理图像
1 不同色彩空间的转换 opencv 中有数百种关于不同色彩空间的转换方法,但常用的有三种色彩空间:灰度.BRG.HSV(Hue-Saturation-Value) 灰度 - 灰度色彩空间是通过去除彩 ...
- opencv学习笔记(七)SVM+HOG
opencv学习笔记(七)SVM+HOG 一.简介 方向梯度直方图(Histogram of Oriented Gradient,HOG)特征是一种在计算机视觉和图像处理中用来进行物体检测的特征描述子 ...
- opencv学习笔记(六)直方图比较图片相似度
opencv学习笔记(六)直方图比较图片相似度 opencv提供了API来比较图片的相似程度,使我们很简单的就能对2个图片进行比较,这就是直方图的比较,直方图英文是histogram, 原理就是就是将 ...
- opencv学习笔记(五)镜像对称
opencv学习笔记(五)镜像对称 设图像的宽度为width,长度为height.(x,y)为变换后的坐标,(x0,y0)为原图像的坐标. 水平镜像变换: 代码实现: #include <ios ...
- opencv学习笔记(四)投影
opencv学习笔记(四)投影 任选了一张图片用于测试,图片如下所示: #include <cv.h> #include <highgui.h> using namespace ...
- opencv学习笔记(三)基本数据类型
opencv学习笔记(三)基本数据类型 类:DataType 将C++数据类型转换为对应的opencv数据类型 OpenCV原始数据类型的特征模版.OpenCV的原始数据类型包括unsigned ch ...
- opencv学习笔记(二)寻找轮廓
opencv学习笔记(二)寻找轮廓 opencv中使用findContours函数来查找轮廓,这个函数的原型为: void findContours(InputOutputArray image, O ...
- opencv学习笔记(一)IplImage, CvMat, Mat 的关系
opencv学习笔记(一)IplImage, CvMat, Mat 的关系 opencv中常见的与图像操作有关的数据容器有Mat,cvMat和IplImage,这三种类型都可以代表和显示图像,但是,M ...
- paper 93:OpenCV学习笔记大集锦
整理了我所了解的有关OpenCV的学习笔记.原理分析.使用例程等相关的博文.排序不分先后,随机整理的.如果有好的资源,也欢迎介绍和分享. 1:OpenCV学习笔记 作者:CSDN数量:55篇博文网址: ...
- (转) OpenCV学习笔记大集锦 与 图像视觉博客资源2之MIT斯坦福CMU
首页 视界智尚 算法技术 每日技术 来打我呀 注册 OpenCV学习笔记大集锦 整理了我所了解的有关OpenCV的学习笔记.原理分析.使用例程等相关的博文.排序不分先后,随机整理的 ...
随机推荐
- zookeeper_04:curator
定义 Curator是Netflix公司开源的一个Zookeeper客户端,与Zookeeper提供的原生客户端相比,Curator的抽象层次更高,简化了Zookeeper客户端的开发量. <d ...
- Python学习笔记(三)Python的list和tuple
list list类似其他语言中的数组,是一种有序的集合,可以随时添加和删除其中的元素. 使用len()函数可以获得list元素的个数. list的索引从0开始,当超出范围时会报IndexError错 ...
- Asp.net身份认证记录
基础知识 身份标识在客户端主要是两个存储位置: cookie 常用 url 很少用 url作为cookie禁用的备选方案 form 几乎不用 很麻烦,每次请求都必须是form提交方式 authoriz ...
- Database.SetInitializer的几种参数
一:数据库不存在时重新创建数据库 Database.SetInitializer<testContext>(new CreateDatabaseIfNotExists<testCon ...
- knockout 与checkbox联动
knockout 通过teplate实现简单的代码实现复杂的操作绑定checkbox,代码如下自我感觉很赞!!! 前台HTml <ul data-bind="template: { n ...
- MySQL----alter table modify | change的不同
1.modify.change都可以修改列的属性:一同的是modify只能修改表的数据类型.change比它要牛逼一点它可以在修改数据类型的同时也修改列名. 2.modify 的语法:alter ta ...
- webstrom 常用快捷键
最近在学习javascript,同时发现了一款非常好用的IDE webstrom 现在记录改IDE的快捷键 1. ctrl + shift + n: 打开工程中的文件,目的是打开当前工程下任意目录的文 ...
- 从ASP.NET传递参数给水晶报表
原文 http://www.cnblogs.com/insus/p/3281114.html 上次Insus.NET有简单写了一篇文章<Visual Studio 2012使用水晶报表Cryst ...
- java双线程调用同一个对象+锁
两个线程(Thread)调用同一个对象(使用Runnable接口的对象ThreadJob) 误区:下一个线程会从上一个线程结束的地方开始 正解:如 public domd implements Run ...
- cnn softmax regression bp求导
内容来自ufldl,代码参考自tornadomeet的cnnCost.m 1.Forward Propagation convolvedFeatures = cnnConvolve(filterDim ...