OpenCV(三)回归计算机视觉,对图像平滑处理

本文介绍了一个使用OpenCV进行图像平滑处理的C程序示例,并解释了关键函数cvSmooth()的工作原理及其参数意义。此外,还深入探讨了平滑处理的概念及应用场景。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

#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()函数能平滑处理。当然我们也要知道,平滑处理是什么?怎么用?
     平滑处理其实是指平滑空间滤波器,概念相当简单,冈萨雷斯是这样定义的:它用滤波掩模确定的领域内像素的平均灰度值去代替图像每个像素点的值。
111
111
111

就像这个三乘三表格,以每一个像素点为中心,累加然后平均就可以得到平滑后每个像素点的值。
那么什么时候会用到平滑处理呐?平滑滤波器用于模糊处理和减小噪声。例如,在提取大的目标之前去除图像中一些琐碎的细节,桥接直线或曲线的缝隙。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值