1:代码如下:
#include "stdafx.h"
#include "highgui.h"
#include "cv.h"
void example2_4(IplImage* image)
{
cvNamedWindow("Example4-in");//创建窗口显示输入
cvNamedWindow("Example4-out");//创建窗口显示输出
cvShowImage("Example4-in",image);
//创建首地址并分配存储空间IplImage* cvCreateImage( CvSize size, int depth, int channels );
//size 图像宽、高
//depth 图像元素的位深度,IPL_DEPTH_8U - 无符号8位整型
//channels 每个元素(像素)通道数.可以是 1, 2, 3 或 4
//得到二维的数组的尺寸,以CvSize返回.
//CvSize,OpenCV的基本数据类型之一。表示矩阵框大小,以像素为精度。与CvPoint结构类似
IplImage* out=cvCreateImage(cvGetSize(image),IPL_DEPTH_8U,3);
//函数 cvSmooth 可使用简单模糊、简单无缩放变换的模糊、中值模糊、高斯模糊、双边滤波的任何一种方法平滑图像
//cvSmooth(输入图像,输出图像,平滑方法,平滑操作的第一个参数(此时表示模糊的程度且必须设置为奇数),平滑操作的第二个参数)
cvSmooth(image,out,CV_GAUSSIAN,15,3);
cvShowImage("Example4-out",out);
cvReleaseImage(&out);
cvWaitKey(0);
cvDestroyWindow("Example4-in");
cvDestroyWindow("Example4-out");
}
int main(int argc, char* argv[])
{
IplImage* img=cvLoadImage("C:\\horse.jpg");
example2_4(img);
return 0;
}
运行结果:
2:cvSmooth的解释
/*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:平滑类型
CV_BLUR_NO_SCALE:(简单不带尺度变换的模糊)对每个象素的param1×param2领域求和。如果邻域大小是变化的,
可以事先利用函数cvIntegral 计算积分图像。
CV_BLUR:(simple blur)对每个象素param1×param2邻域求和并做尺度变换1/(param1.param2)。
CV_GAUSSIAN:(gaussian blur)对图像进行核大小为param1×param2的高斯卷积。
CV_MEDIAN:(median blur)对图像进行核大小为param1×param1 的中值滤波(i.e. 邻域是方的)。
CV_BILATERAL:(双向滤波)应用核大小为param1×param1的滤波,彩色sigma=param3,空间sigma=param4。*/