OpenCV(三)回归计算机视觉,对图像平滑处理
2016-11-12 10:41
302 查看
#include "cv.h" #include "highgui.h" void smooth(IplImage *image){ cvNamedWindow("in",0); cvNamedWindow("out",0); cvShowImage("in",image); IplImage* out =cvCreateImage(cvGetSize(image),IPL_DEPTH_8U,3); cvSmooth(image,out ,CV_GAUSSIAN, 3, 3,0.0,0.0); cvShowImage("out",out); cvReleaseImage(&out); cvWaitKey(0); cvDestroyWindow("in"); cvDestroyWindow("out"); } int main() { IplImage* img=cvLoadImage("G:/test.bmp",-1); smooth(img); return 0; }
代码讲解:
IplImage* out =cvCreateImage(cvGetSize(image),IPL_DEPTH_8U,3);
上一篇文章中讲解了cvCreateFileCapture()来为新的帧分配空间。但是cvCreateFileCapture()只分配一帧图像的空间,每次调用时覆盖前面一次的数据(这样每次调用返回的指针是一样的)。那么为了分配自己 的图像结构空间用来存储平滑处理后的图像。第一个参数是一个CvSize结构,这个结构可以通过cvGetSize() 获得;第一个参数说明了当前图像结构的大小。第二个参数告诉我们每个像素点的数据类型,最后一个参数说明了通道的参数。所以当前图像是3个通道(每个通道8位),图像大小为image。
cvSmooth(image,out ,CV_GAUSSIAN, 3, 3,0.0,0.0);
对于OpenCV来说,平滑处理其实就是调用一个库函数那么简单。第一个参数,指定输入的图像;第二个参数,输出图像;光滑操作的方法以及相关一些参数。在本程序中,我们使用每个像素周围3*3区域进行高斯平滑处理。
当然写C程序的好习惯就是你用了编译器的空间,你得给它还回去,就是最后要cvReleaseImage();释放空间。
后话:当然作为搞图像的,我们不能仅仅知道利用cvSmooth()函数能平滑处理。当然我们也要知道,平滑处理是什么?怎么用?
平滑处理其实是指平滑空间滤波器,概念相当简单,冈萨雷斯是这样定义的:它用滤波掩模确定的领域内像素的平均灰度值去代替图像每个像素点的值。
1 | 1 | 1 |
1 | 1 | 1 |
1 | 1 | 1 |
那么什么时候会用到平滑处理呐?平滑滤波器用于模糊处理和减小噪声。例如,在提取大的目标之前去除图像中一些琐碎的细节,桥接直线或曲线的缝隙。
相关文章推荐
- 《opencv3编程入门》之一:图像处理、计算机视觉与opencv
- 【计算机视觉】【图像处理】图像平滑-均值平滑+中值平滑
- OpenCV 图像处理 计算机视觉 深度学习 优秀博主推荐
- 计算机视觉与图像处理学习笔记(二)win32+mingw+opencv搭建
- 3_opencv2计算机视觉学习_基于类的图像处理
- 计算机视觉与图像处理学习笔记(三)opencv的基本数据类型与简单图像处理函数
- 【计算机视觉】【图像处理】图像平滑-高斯平滑
- 【计算机视觉】【图像处理】图像平滑-双边滤波+联合双边滤波+导向滤波
- OpenCV3计算机视觉Python语言实现(三):使用OpenCV3处理图像
- 【计算机视觉】【图像处理】图像平滑-二维离散卷积
- 【计算机视觉】【图像处理】【VS开发】【Qt开发】opencv之深拷贝及浅拷贝,IplImage装换为Mat
- 计算机视觉与图像处理(一)——卷积与opencv
- OpenCV-图像处理和计算机视觉
- OpenCV2 图像处理与计算机视觉(一)—— 去除一幅二值化图像中的椒盐噪声
- 图像处理和计算机视觉中的经典论文
- OpenCV 图像处理——平滑操作
- 图像处理与计算机视觉资源汇总——论文+代码+教材+视频等等
- 图像处理与计算机视觉:基础,经典以及最近发展
- 图像处理和计算机视觉中的经典论文
- 图像处理与计算机视觉开源软件库