OpenCV图像学习八,图像归一化盒子滤波处理和图像高斯滤波处理实现

OpenCV图像模糊原理

       模糊操作是图像处理中最简单和常用的操作之一,使用该操作的原因之一就为了给图像预处理时减低椒盐噪声。 图像模糊,也称为平滑操作,是一种简单且经常使用的图像处理操作,平滑主要是能减少噪声。

       要执行平滑操作,我们将对图像应用滤镜。最常见的滤波器类型是线性的,其中输出像素的值(即g(i ,j )被确定为输入像素值的加权和(即F(i + k ,j + l )):

h (k ,l ) 被称为内核,它是过滤器的系数。它有助于将滤波器可视化为在图像上滑动的系数窗口。

f() 表示输入的一副图像;

i、j 表示输入图像的行和列;

h(k,l) 表示卷积算子(卷积核,也可以叫掩膜),它的大小可以设定;

k, l 系数的大小又可以叫窗口大小(掩膜的大小,比如3*3);

g() 表示输出的像素值;

f() 的第一行,第一列像素点无法进入卷积算子的红色中心区域,不能进行卷积计算,只能进行相应的边缘像素处理。

假设把图像分解成6x6的图像像素点矩阵,卷积过程:

6x6图像上面有个3x3的卷积窗口,每次移动一个像素格,依次从左向右,从上向下移动,红色中心点的位置依次移动,黄色的每个像个像素点值之和,取平均值赋给中心红色像素点,作为它卷积处理之后新的像素值。

一.归一化盒子滤波(均值滤波)

API函数接口

blur(Mat src,Mat dst,Size(w,h),Point(-1,-1));

归一化过滤器是最简单的,每个输出像素是其内核邻居的平均值(所有这些像素都具有相同的权重)

参数说明:
src : 源输入图像
dst : 目标图像
Size() : 定义要使用的内核的大小(宽度为w像素,高度为h像素)
Point : 表示锚点(被评估的像素)相对于邻域的位置。如果存在负值,则将内核的中心视为锚点

二.高斯滤波器 (Gaussian Filter)

高斯滤波器是最有用的过滤器。通过将输入数组中的每个点与高斯卷积核核进行卷积,然后将它们相加以产生输出数组来完成高斯滤波。

 

API 函数接口

GaussianBlur(Mat src,Mat dst,Size(w,h),sigmax,sigmay)
src:输入源图像
dst:目标图像
Size(w,h) : 要使用的内核的大小。w 和H必须是奇数和正数,否则将使用σX和σÿ参数计算大小。
sigmax : x中的标准差。写0表示使用内核大小计算σx
sigmay : y的标准差。写0表示使用内核大小计算σy。


===============================================================

代码实现:

#include"stdafx.h"
#include<opencv2/opencv.hpp>
#include <iostream>
using namespace cv;


int main(int argc, char** argv)
{
	Mat src, dst;
	src = imread("F:/photo/qx.jpg");
	if (!src.data)
	{
		printf("could not load image");
		return -1;
	}
	char input_title[] = "input image";
	char output_title[] = "blur image";
	namedWindow(input_title, 1);
	namedWindow(output_title, 1);
	imshow(input_title, src);

	blur(src, dst, Size(5, 5), Point(-1, -1));
	imshow(output_title, dst);

	Mat gblur;
	GaussianBlur(src, gblur, Size(11, 11), 11, 11);
	imshow("gaussian blur", gblur);


	waitKey(0);
	return 0;
}

=================================================================

图像处理效果:

猜你喜欢

转载自blog.csdn.net/weixin_44651073/article/details/126310717