opencv学习笔记6 图像平滑处理cvSmooth

news/2024/7/21 3:48:08 标签: 图像处理, opencv

函数原理:

CVAPI(void) cvSmooth( const CvArr* src, CvArr* dst,
                      int smoothtype CV_DEFAULT(CV_GAUSSIAN),
                      int size1 CV_DEFAULT(3),
                      int size2 CV_DEFAULT(0),
                      double sigma1 CV_DEFAULT(0),
                      double sigma2 CV_DEFAULT(0));

参数1:const CvArr* src:处理的源图片;

参数2:const CvArr* dst:处理后的输出图片;

注解:

(1)对于CvArr这一结构,我们可以将其看做C++中的基类,当然也包括IplImage

(2)smooth支持的类型:

CV_BLUR 简单模糊 对每个像素param1,param2求和,并缩放1/(param1*param2),亦即求简单平均值

CV_BLUR_NO_SCALE 简单无缩放变化的模糊 对每个像素param1,param2求和 特别说明的是输入图像和结果图像必须有不同的数值精度,以保证不会发生溢出,如果源图像是8u,则结果图像必须是16s或者32s

CV_MEDIAN 中值模糊 取中心像素的正方形领域类的每个像素的值用中间值代替

CV_GAUSSIAN 高斯模糊 param3为零时,高斯卷积核sigma通过以下公式计算

sigma(x) = (n(x)/2-1)*0.30+0.80,n(x)= param1

sigma(y) = (n(y)/2-1)*0.30+0.80,n(y)= param2

如果第四个参数指定,则第三个和第四个参数分别表示sigma的水平方向和垂直方向的值

如果第三个,第四个参数已经指定,而前两个参数为0,那么窗口的尺寸由sigma确定

速度较慢但最有效

CV_BILATERAL 双向滤波 因为高斯模糊是在图像在空间内的像素是缓慢变化的,但随机的两个点可能形成很大的

像素差,高斯滤波在保留信号的条件下减少噪声,但在接近边缘的地方无效,双向滤波可以解决这个问题,但需要更多的时间代价,

其需要两个参数,param1表示空域中所使用的高斯核的宽度,param2表示颜色域高斯核的高度


从这两幅图片对比可看出,使用3*3模板大小进行中值滤波后的结果已相当不错。

以下是附出的代码:


#include<cv.h>
#include<highgui.h>
void main()
{
	IplImage* imageIn;
	cvNamedWindow("imageIn", CV_WINDOW_AUTOSIZE);
	cvNamedWindow("imageOut", CV_WINDOW_AUTOSIZE);
	
	imageIn = cvLoadImage("E:\\f\\图像处理图片\\椒盐噪声.jpg");
	cvShowImage("imageIn", imageIn);
	IplImage* imageOut = cvCreateImage(cvGetSize(imageIn), IPL_DEPTH_8U, 3);
	cvSmooth(imageIn, imageOut, CV_MEDIAN, 3, 3);
	cvShowImage("imageOut", imageOut);
	cvSaveImage("E:\\f\\图像处理图片\\afterMedian.jpg", imageOut);
	cvWaitKey(0);
	cvReleaseImage(&imageIn);
	cvReleaseImage(&imageOut);
	cvDestroyAllWindows();
}




http://www.niftyadmin.cn/n/1691934.html

相关文章

已知三点坐标求外接圆方程和RANSAC算法的介绍,用C语言实现,其使用随机抽样一致性算法来求最合适圆时使用

已知三点坐标 (x1,y1)(x2,y2)(x3,y3) 求外接圆方程&#xff0c;圆的表达式是&#xff1a; (x-a)^2(y-b)^2r^2 把三个点带入去&#xff0c;则可以进行化简&#xff0c;最后通过程序实现则为&#xff1a; void miniCircle(myPoint *p,myPoint& center,double& radius) { …

通过HSV进行RGB二值化,

通过HSV进行RGB二值化&#xff0c;其可以利用与颜色目标提前&#xff0c;如车牌的识别&#xff0c;可以把其蓝色大概区域识别出来&#xff0c;再进行边缘检测&#xff0c;从而实现车牌识别&#xff0c;有利于提高检测的鲁棒性。 #include "stdafx.h" #include "…

python考试系统安装教程_Python新手安装教程

一、下载安装包进入Python下载最新版本的安装包&#xff0c;根据你的系统下载64位或32位&#xff0c;下载地址&#xff1a;https://www.python.org/downloads/。二、安装步骤2.1打开Python安装包&#xff0c;出现以下界面&#xff1a;我这里已经是3.7版本&#xff0c;以前的老版…

关于OPencv里仿射变化和透射变换的理解和理论

1、仿射变换是透射变换的一个特例。其仿射变换是线性的&#xff0c;其需要的是2*3的矩阵和三个控点。透视变换是非线性的&#xff0c; 其需要的是3*3的矩阵和四个控点&#xff0c;具体的可以opencv2书里的&#xff0c;后面附带透射变换和仿射变换的程序 当我们绕着图像原点进行…

opencv学习笔记7 绘制多边形

函数原型&#xff1a; CVAPI(void) cvPolyLine( CvArr* img, CvPoint** pts, const int* npts, int contours,int is_closed, CvScalar color, int thickness CV_DEFAULT(1),int line_type CV_DEFAULT(8), int shift CV_DEFAULT(0) );第一个参数&#xff1a;CvArr* img :&…

appium使用教程python_Python+Appium+Android的基本使用方法

Appium连接设备的方法运行Appium配置参数测试相机应用只需要改设备序列号即可。获取设备序列号的方法&#xff1a;​ 若测试其它应用需要更改和。​ 获取和设备序列号的方法&#xff1a;from appium import webdriverdeviceName f65c397eb691 # 指定序列号# 配置设备参数desir…

opencv里的norm范数和图像里的深度和通道数的理解和意义和相机标定后对内外参数的质量评估

CV_8UC1 是指一个8位无符号整型单通道矩阵, CV_32FC2是指一个32位浮点型双通道矩阵 CV_8UC1 CV_8SC1 CV_16U C1 CV_16SC1 CV_8UC2 CV_8SC2 CV_16UC2 CV_16SC2 CV_8UC3 CV_8SC3 CV_16UC3 CV_…

opencv学习笔记8 将文字打印到图片上

用到的主要函数语句是&#xff1a; cvInitFont()、cvPutText() 函数原型及相应参数解释如下&#xff1a; CVAPI(void) cvPutText( CvArr* img, const char* text, CvPoint org,const CvFont* font, CvScalar color );img---图片指针(需要说明的是&#xff0c;CvArr* 等价于…