opencv图像操作——图像模糊


前言


以下是本篇文章正文内容,下面案例可供参考

一、模糊理论(Fuzzy Theory)

	模糊理论(Fuzzy Theory)是指用到了模糊集合的基本概念,或连续隶属度函数的理论。它可分类为模
糊数学,模糊系统,不确定性和信息,模糊决策,模糊逻辑与人工智能这五个分支,它们并不是完全独立,
它们之间有紧密的联系。例如,模糊控制就会用到模糊数学和模糊逻辑中的概念。从实际应用的观点来看,
模糊理论的应用大部分集中在模糊系统上,尤其集中在模糊控制上。也有一些模糊专家系统应用于医疗诊
断和决策支持。由于模糊理论从理论和实践的角度看仍然是新生事物,所以我们期望,随着模糊领域的成
熟,将会出现更多可靠的实际应用。

	模糊理论是以模糊集合(fuzzy set)为基础,其基本精神是接受模糊性现象存在的事实,而以处理
概念模糊不确定的事物为其研究目标,并积极的将其严密的量化成计算机可以处理的讯息,不主张用繁
杂的数学分析即模型来解决模型。

二、模糊原理:

Smooth/Blur是图像处理中最简单和常用的操作之一使用该操作的原因之一就为了给图像预处理时候减低噪声使用Smooth/Blur操作其背后是数学的卷积计算
通常卷积算子计算都是线性操作,又叫线性滤波

卷积计算函数:
在这里插入图片描述

三、ps中的模糊

1.选择工具栏中的锐化工具

在这里插入图片描述

2、处理后的图像

在这里插入图片描述


四、Opencv模糊API操作

1、blur()函数

简介:使用规范化的长方体过滤器模糊图像
定义:

void blur( InputArray src, OutputArray dst,Size ksize, Point anchor = Point(-1,-1),
           int borderType = BORDER_DEFAULT );
/*
src:是输入图像;
dst:是输出图像;
ksize:模糊内核大小
anchor anchor point;默认值point(-1,-1)表示锚点位于内核居中。
borderType border mode:用于推断图像外部的像素
*/

使用方法:

blur(src, dst, Size(3, 3), Point(-1, -1));//均值模糊

2、GaussianBlur()函数

简介:使用高斯滤波器模糊图像
定义:

void GaussianBlur( InputArray src, OutputArray dst, Size ksize,double sigmaX, 
				   double sigmaY = 0,int borderType = BORDER_DEFAULT );
/*
src:是输入图像;
dst:是输出图像;
ksize:模糊内核大小
sigmaX: X方向的sigmaX高斯核标准差。
sigmaY: Y方向高斯核标准差;如果sigmaY为零,则设置为等于sigmaX,如果两个sigma都为零,则根据K尺寸.宽度以及K尺寸高度
borderType: 像素外推方法
*/

使用方法:

GaussianBlur(src, dst, Size(5, 5), 11, 11);//高斯模糊

3、medianBlur()函数

简介:使用中值滤波器模糊图像。
定义:

void medianBlur( InputArray src, OutputArray dst, int ksize );
/*
src:是输入图像;
dst:是输出图像;
ksize aperture linear size;必须是奇数且大于1,例如:3、5、7。。。
*/

使用方法:

medianBlur(src, dst, 3);//中值模糊

4、bilateralFilter()函数

简介:使用高斯滤波器模糊图像
定义:

void bilateralFilter( InputArray src, OutputArray dst, int d,double sigmaColor, 
					  double sigmaSpace, int borderType = BORDER_DEFAULT );
/*
src:是输入图像;
dst:是输出图像;
d: 过滤过程中使用的每个像素邻域的直径。如果是非阳性,是从sigmaSpace计算出来的;
sigmaColor: 参数值越大意味着像素邻域内的其他颜色将混合在一起,从而在较大的半等色区域。
sigmaSpace: 在坐标空间中过滤sigma。参数值越大意味着更远的像素会互相影响,只要它们的颜色足够接近.当d\>0时,它指定邻域大小,而不考虑sigmaSpace。否则,d是与sigmaSpace成比例。
borderType: 像素外推方法
*/

使用方法:

bilateralFilter(src, dst, 15, 100, 3);//高斯双边模糊

5、filter2D操作

定义:

void filter2D( InputArray src, OutputArray dst, int ddepth, InputArray kernel, Point anchor = 			
				Point(-1,-1), double delta = 0, int borderType = BORDER_DEFAULT );
/*
src:是输入图像;
dst:是输出图像;
ddepth: 目标图像的所需深度
kernel: 内核卷积内核(或者更确切地说是相关内核),单通道浮点如果要将不同的内核应用于不同的通道,请将图像拆分为使用split分离颜色平面并单独处理它们。
anchor表示内核中过滤点的相对位置的锚内核;锚点应该位于内核中;默认值(-1,-1)表示锚点位于内核中心。
delta: 在将过滤后的像素存储到dst之前添加到像素的可选值
borderType: 像素外推方法
*/

使用方法:

Mat kennel = (Mat_<int>(3, 3) << 0, -1, 0, -1, 5, -1, 0, -1, 0);
filter2D(dst, dst, -1, kennel, Point(-1, -1), 0);

五、模糊图像代码演示

代码块:

#include <opencv2/opencv.hpp>
#include <iostream>
#include "facedetectcnn.h"

using namespace std;
using namespace cv;
int main() {
    
    
	Mat src, dst;
	src = imread("D:\\Myfile\\素材照片\\opencv素材照片\\4.jpg");
	if (!src.data) {
    
    
		cout << "could not load image..." << endl;
		return 0;
	}
	namedWindow("input_image", WINDOW_AUTOSIZE);
	imshow("input_image", src);

	char output_title[] = "blur_image";
	//blur(src, dst, Size(3, 3), Point(-1, -1));//均值模糊fliter2D
	//GaussianBlur(src, dst, Size(5, 5), 11, 11);//高斯模糊
	//medianBlur(src, dst, 3);//中值模糊
	bilateralFilter(src, dst, 15, 100, 3);//高斯双边模糊
	Mat kennel = (Mat_<int>(3, 3) << 0, -1, 0, -1, 5, -1, 0, -1, 0);
	filter2D(dst, dst, -1, kennel, Point(-1, -1), 0);

	namedWindow(output_title, WINDOW_AUTOSIZE);
	imshow(output_title, dst);

	waitKey(0);
	return 0;
}

在这里插入图片描述

运行结果:

总结

如有疑问,请留言!
如有错误,敬请指正!

猜你喜欢

转载自blog.csdn.net/ivan_9/article/details/113809389
今日推荐