高斯滤波
高斯滤波是一种线性平滑滤波,适用于消除高斯噪声,广泛应用于图像处理的减噪过程。 通俗的讲,高斯滤波就是对整幅图像进行加权平均的过程,每一个像素点的值,都由其本身和邻域内的其他像素值经过加权平均后得到。高斯滤波的具体操作是:用一个模板(或称卷积、掩模)扫描图像中的每一个像素,用模板确定的邻域内像素的加权平均灰度值去替代模板中心像素点的值。高斯滤波是利用高斯核的一个2维的卷积算子,用于图像模糊化(去除细节和噪声)。
/**
src 待高斯滤波图像,图像可以具有任意的通道数目,但是数据类型必须为CV_8U,CV_16U,CV_16S,CV_32F或CV_64F
dst 输出图像,与输入图像src具有相同的尺寸、通道数和数据类型
ksize 高斯滤波器的尺寸,滤波器可以不为正方形,但是必须是正奇数。如果尺寸为0,则由标准偏差计算尺寸
sigmaX X方向的高斯滤波器标准偏差
sigmaY Y方向的高斯滤波器标准偏差; 如果输入量为0,则将其设置为等于sigmaX,如果两个轴的标准差均为0,则根据输入的高斯滤波器尺寸计算标准偏差。
borderType 像素外推法选择标志。默认参数为BORDER_DEFAULT,表示不包含边界值倒序填充。
**/
public static void GaussianBlur(Mat src, Mat dst, Size ksize, double sigmaX, double sigmaY, int borderType)
使用
/**
* 高斯滤波
* @param bitmap
* @param iv
*/
public static void setGauss(Bitmap bitmap, ImageView iv){
Mat mSource = new Mat();
Utils.bitmapToMat(bitmap, mSource);
Mat grayMat = new Mat();
Imgproc.cvtColor(mSource,grayMat,Imgproc.COLOR_BGR2GRAY);//转换成灰度图
//高斯滤波
Mat gauss = new Mat();
Imgproc.GaussianBlur(grayMat, gauss,new Size(21.0, 21.0), 0);
showImg(gauss,iv);
}
/**
* 显示图像
* @param mat
* @param mIvSrc
*/
private static void showImg(Mat mat, ImageView mIvSrc){
Bitmap bitmap = Bitmap.createBitmap(mat.width(), mat.height(), Bitmap.Config.ARGB_8888);
Utils.matToBitmap(mat, bitmap);
mIvSrc.setImageBitmap(bitmap);
mat.release();
}