opencv c++ (7):模糊与锐化

本文介绍了在OpenCV中如何使用高斯模糊、拉普拉斯滤波以及锐化技术来处理图像,包括它们的作用、原理和在不同场景下的应用。此外,还提到了中值滤波、双边滤波等其他滤波方法及其在图像处理中的作用。
摘要由CSDN通过智能技术生成

前言介绍

在图像处理中,模糊(也称为平滑)和锐化是两种常见的图像滤波技术,它们可以用来改变图像的外观和质量。
在OpenCV中,模糊和锐化可以通过不同的滤波器来实现,如平均滤波、高斯滤波、拉普拉斯滤波等。根据具体的需求和应用场景,可以选择合适的滤波器来达到期望的效果。以下是一些具体方法。

1. 高斯模糊

Size越大模糊程度越大,原理不在介绍,直接看使用方法,一般都用高斯模糊,其他模糊方法可自寻探索

#include <iostream>
#include<opencv.hpp>
#include<opencv2\highgui\highgui.hpp>

using namespace std;
using namespace cv;

int main()
{

	Mat src = imread("src.jpg");
	if (src.empty())
	{
		cout << "could not open file!";
		cout << endl;
		return -1;
	}
	imshow("src", src);
	Mat dst;

	//高斯模糊, sigm=0, 则通过Size计算
	GaussianBlur(src, dst, Size(7, 7), 0);
	imshow("dst", dst);

	waitKey(0);
	destroyAllWindows();
	return 0;

}

在这里插入图片描述

2. 锐化

	//锐化
	//1.Blur
	GaussianBlur(src, blur_imag, Size(3, 3), 0);
	
	//2. 拉普拉斯梯度获取,获得图像中的高频信息
	Laplacian(src, dst, -1, 1, 1.0, 0, BORDER_DEFAULT);

	//3. 相加
	Mat ums_image;
	addWeighted(blur_imag, 1.0, dst, -0.7, 0, ums_image);

	imshow("ums", ums_image);

3. 作用

1). 模糊(平滑):

  • 模糊可以减少图像中的噪声和细节,使图像变得更加平滑和柔和。这对于一些图像处理任务如边缘检测、图像分割等是有益的。
  • 模糊还可以模糊敏感信息,如人脸识别中对个人隐私的保护。

2). 锐化:

  • 锐化可以增强图像中的细节和边缘,使图像看起来更清晰和更有立体感。这对于提高图像的视觉质量是有益的。
  • 锐化还可以使图像中的特定目标更加突出,有助于目标检测和识别任务。

4. 其他方法

不做详细说明
除了常见的平均滤波、高斯滤波和拉普拉斯滤波外,OpenCV还提供了其他一些用于模糊和锐化的方法,以下是一些常用的方法:

  1. 中值滤波(Median Blur):

    • 中值滤波是一种非线性滤波方法,它将像素的值替换为邻域内所有像素值的中值。这种方法对于去除椒盐噪声(Salt and Pepper Noise)非常有效。
    • 中值滤波在图像处理中常用于去除噪声,并且可以保留图像的边缘信息。
  2. 双边滤波(Bilateral Filter):

    • 双边滤波是一种结合了空间距离和像素值相似性的滤波方法,它可以在减少噪声的同时保持图像的边缘和细节信息。
    • 双边滤波在图像处理中常用于平滑图像并保持图像的细节,适用于许多图像处理任务。
  3. 锐化滤波(Sharpening Filter):

    • 锐化滤波是一种增强图像细节和边缘的滤波方法,它可以使图像看起来更加清晰和锐利。
    • 锐化滤波通常通过增加像素与其周围像素之间的差值来实现,以突出图像中的细节。

这些方法在图像处理中都有各自的应用场景和优势,可以根据具体的需求选择合适的方法来实现图像模糊和锐化效果。在OpenCV中,这些滤波方法都可以通过相应的函数进行实现。

API 参数说明

cv::GaussianBlurc()
cv::GaussianBlur()函数用于对图像进行高斯模糊处理,可以减少图像中的噪声并平滑图像。该函数的参数说明如下:

  • 输入参数:
    • src:输入图像,通常是一个cv::Mat类型的多通道图像。
    • dst:输出图像,用于存储经过高斯模糊处理后的图像,通常是一个cv::Mat类型的多通道图像。
    • ksize:高斯核的大小,通常是一个奇数的正整数,表示高斯核的宽和高。
    • sigmaX:X 方向的高斯核标准差。
    • sigmaY:Y 方向的高斯核标准差,如果为0,则默认与sigmaX相同。

示例代码:

cv::Mat src = cv::imread("image.jpg");
cv::Mat dst;
cv::GaussianBlur(src, dst, cv::Size(5, 5), 0, 0);

在上面的示例中,src是输入的图像,dst是用于存储处理后的图像。调用cv::GaussianBlur()函数对输入图像进行高斯模糊处理,使用5x5大小的高斯核,X 和 Y 方向的标准差均为0,最终结果存储在dst中。

cv::Laplacian()

  • src:输入图像,即要进行边缘检测的图像。通常为单通道灰度图像。

  • dst:输出图像,即存储边缘检测结果的图像。通常为与输入图像相同尺寸和深度的图像。

  • ddepth:输出图像的深度,即输出图像的数据类型。可以是以下几种选项之一:

    • CV_16S:16位有符号整数
    • CV_32F:32位浮点数
    • CV_64F:64位浮点数
  • ksize:拉普拉斯算子的卷积核大小。可以是以下几种选项之一:

    • 1:表示使用3x3的卷积核
    • 3:表示使用5x5的卷积核
    • 5:表示使用7x7的卷积核
  • scale:可选参数,用于调节输出图像的缩放因子。默认值为1。

  • delta:可选参数,用于调节输出图像的偏移值。默认值为0。

  • borderType:可选参数,用于指定边界填充类型。默认值为BORDER_DEFAULT,表示使用默认的边界填充方式。

通过调整这些参数,可以对输入图像进行不同尺寸和深度的拉普拉斯边缘检测操作,并根据需要调节输出图像的缩放因子、偏移值和边界填充方式。

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

idealmu

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值