【C++】【Opencv】cv::GaussianBlur、cv::filter2D()函数详解和示例

这篇具有很好参考价值的文章主要介绍了【C++】【Opencv】cv::GaussianBlur、cv::filter2D()函数详解和示例。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

本文通过函数详解和运行示例对cv::GaussianBlur和cv::filter2D()两个函数进行解读,最后综合了两个函数的关系和区别,以帮助大家理解和使用。

cv::GaussianBlur()

函数详解

cv::GaussianBlur 是 OpenCV 库中的一个函数,用于对图像进行高斯模糊。高斯模糊是一种常见的图像降噪技术,它通过使用高斯函数对图像进行卷积来减少噪声和细节。

函数原型如下:

void cv::GaussianBlur(InputArray src, OutputArray dst, Size ksize, double sigmaX, double sigmaY, int borderType)

参数解释:

src:输入图像。
dst:输出图像。
ksize:高斯核的大小。它必须是奇数,如 (3, 3), (5, 5), (7, 7) 等。
sigmaX:X方向的标准差。这是高斯核在X方向上的宽度。
sigmaY:Y方向的标准差。这是高斯核在Y方向上的宽度。如果sigmaY为0,则函数会自动根据kernel大小来计算sigmaY,如果sigmaX和sigmaY都为0,那么这两个参数都会被设置为cv::DBL_MAX。如果sigmaY不为0而sigmaX为0,那么sigmaX会被设置为等于sigmaY。
borderType:像素外插法,有默认值。

运行示例

#include <opencv2/opencv.hpp>
#include <iostream>

using namespace cv;
using namespace std;

int main() {
    Mat image = imread("image.jpg", IMREAD_COLOR); // 读取输入图像
    if (image.empty()) {
        cout << "无法读取图像文件" << endl;
        return -1;
    }
    Mat blurredImage;
    GaussianBlur(image, blurredImage, Size(5, 5), 1.0, 1.0); // 对图像进行高斯模糊处理
    imshow("Original Image", image); // 显示原始图像
    imshow("Blurred Image", blurredImage); // 显示模糊后的图像
    waitKey(0); // 等待按键
    return 0;
}

在这个示例中,我们首先读取一个图像文件,然后使用 cv::GaussianBlur() 对其进行高斯模糊处理。注意,在调用 cv::GaussianBlur() 时,我们需要指定高斯核的大小和标准差参数。最后,我们使用 imshow() 来显示原始图像和模糊后的图像。
c++ gaussianblur,C、C++日常记录,opencv,c++,计算机视觉,人工智能,图像处理
上面为原图,下面为滤波后图像。可以看出远处的高楼变得模糊了。可以调整核大小和偏差修改相应的效果。
c++ gaussianblur,C、C++日常记录,opencv,c++,计算机视觉,人工智能,图像处理

filter2D()

函数详解

filter2D() 是 OpenCV 库中的一个函数,用于对图像进行线性滤波。它使用指定的核来对输入图像进行卷积,以实现平滑、锐化、边缘检测等效果。

void cv::filter2D(InputArray src, OutputArray dst, int ddepth, InputArray kernel, Point anchor=Point(-1,-1), double delta=0, int borderType=BORDER_DEFAULT)

参数解释:

src:输入图像。
dst:输出图像。
ddepth:输出图像的深度,通常为 CV_8U、CV_16U、CV_16S、CV_32F 或 CV_64F。
kernel:指定的滤波核。它是一个包含多个元素(至少为 3x3)的矩阵,用于定义滤波操作的性质。
anchor:锚点。指定了卷积核相对于图像中心的偏移量。默认值为 Point(-1,-1),表示锚点在图像中心。
delta:增量值。用于调整输出图像的像素值。
borderType:像素外插法。指定了处理边界像素的方式。

运行示例

#include <opencv2/opencv.hpp>
#include <iostream>

using namespace cv;
using namespace std;

int main() {
    Mat image = imread("image.jpg", IMREAD_COLOR); // 读取输入图像
    if (image.empty()) {
        cout << "无法读取图像文件" << endl;
        return -1;
    }
    Mat blurredImage;
    int kernelSize = 5; // 高斯核大小
    double sigmaX = 1.0; // X方向标准差
    double sigmaY = 1.0; // Y方向标准差
    GaussianBlur(image, blurredImage, Size(kernelSize, kernelSize), sigmaX, sigmaY); // 对图像进行高斯模糊处理
    imwrite("output.jpg", blurredImage);
    Mat kernel = (Mat_<float>(3, 3) << 1, 4, 1, 4, 16, 4, 1, 4, 1); // 高斯滤波器
    filter2D(blurredImage, blurredImage, -1, kernel); // 应用滤波器
    imshow("Original Image", image); // 显示原始图像
    imshow("filter2D Image ", blurredImage); 
    imwrite("output1.jpg", blurredImage);
    waitKey(0); // 等待按键
    return 0;
}

在这个示例中,我首先使用 cv::GaussianBlur() 对图像进行高斯模糊处理。然后,我创建了一个高斯滤波器,并使用 cv::filter2D() 对模糊后的图像进行滤波处理。最后,我使用 imshow() 来显示原始图像和模糊后的图像。
具体效果如下,下面是原图。
c++ gaussianblur,C、C++日常记录,opencv,c++,计算机视觉,人工智能,图像处理
下面的是模糊处理后的效果图。
c++ gaussianblur,C、C++日常记录,opencv,c++,计算机视觉,人工智能,图像处理
上面是模糊处理后的效果图,下面是经过filter2D函数处理后的效果图,可以通过调整核函数大小调整效果。
c++ gaussianblur,C、C++日常记录,opencv,c++,计算机视觉,人工智能,图像处理

总结

两个函数联系

(1)cv::GaussianBlur()是使用高斯滤波器对图像进行模糊处理,而cv::filter2D()可以应用各种滤波器对图像进行滤波处理。

(2)在使用cv::GaussianBlur()时,需要指定高斯核的大小和标准差参数;而在使用cv::filter2D()时,需要指定一个滤波器作为参数,该滤波器可以是一个自定义的滤波器,也可以是高斯滤波器。

两个函数区别

(1)cv::GaussianBlur()仅适用于高斯模糊处理,而cv::filter2D()可以应用于各种滤波器,包括高斯滤波器、中值滤波器、边缘检测滤波器等。
(2)cv::GaussianBlur()函数需要提供滤波器中系数的数量作为函数的第3个参数,而cv::filter2D()函数不需要提供滤波器中系数的数量。
(3)cv::GaussianBlur()函数仅支持对图像进行二维滤波处理,而cv::filter2D()函数可以支持对图像进行二维或三维滤波处理。文章来源地址https://www.toymoban.com/news/detail-764918.html

到了这里,关于【C++】【Opencv】cv::GaussianBlur、cv::filter2D()函数详解和示例的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 图像平滑处理-卷积函数filter2D详解及均值滤波案例

    图像平滑处理-卷积函数filter2D详解及均值滤波案例 图像处理是计算机视觉中的重要分支。在图像处理中,平滑滤波是一项基本任务。平滑滤波可以消除图像中的噪声和细节,使其更加平滑和清晰。OpenCV-Python是一个常用的图像处理库,它提供了各种图像处理函数和算法。这里

    2024年02月05日
    浏览(42)
  • opencv-python-cv2.GaussianBlur()函数介绍

    高斯滤波 是一种线性平滑滤波,适用于消除高斯噪声,广泛应用于图像处理的减噪过程。 语法:cv2.GaussianBlur(src, ksize, sigmaX, sigmaY, borderType)- dst ——src输入图像。 ——dst输出图像的大小和类型与src相同。 ——ksize高斯内核大小。 ksize.width和ksize.height可以不同,但​​它们都

    2024年02月14日
    浏览(42)
  • opencv(15) 图像平滑处理之二:cv2.GaussianBlur()高斯滤波

    高斯滤波是一种线性平滑滤波,适用于消除高斯噪声,广泛应用于图像处理的减噪过程。 高斯模板是通过对二维高斯函数进行采样(高斯模糊的卷积核里的数值满足高斯分布)、量化并归一化得到的,它考虑了邻域像素位置的影响,距离当前被平滑像素越近的点,加权系数越大

    2024年02月10日
    浏览(57)
  • 【C++】【Opencv】cv::Canny()边缘检测函数详解和示例

    Canny边缘检测是一种流行的边缘检测算法,由John F. Canny在1986年开发。它是一种多阶段过程,包括噪声滤波、计算图像强度的梯度、非最大值抑制以及双阈值检测。本文通过函数原型解读和示例对cv::Canny()函数进行详解,以帮助大家理解和使用。 Canny边缘检测的步骤如下: (

    2024年02月04日
    浏览(59)
  • 【C++】【Opencv】cv::warpAffine()仿射变换函数详解,实现平移、缩放和旋转等功能

    仿射变换是一种二维变换,它可以将一个二维图形映射到另一个二维图形上,保持了图形的“形状”和“大小”不变,但可能会改变图形的方向和位置。仿射变换可以用一个线性变换矩阵来表示,该矩阵包含了六个参数,可以进行平移、缩放、旋转等操作。通过原理、函数和

    2024年02月05日
    浏览(62)
  • CV2逐步学习-2:cv2.GaussianBlur()详解

    目录 高斯模糊GaussianBlur()中 参数详解 1.1. 由参数解释产生的 问题 深入理解前的准备: 高斯函数、图像滤波处理及卷积核 解释1.1的问题 权重矩阵 、高斯模糊的流程 摘要 高斯滤波是一种 线性平滑滤波 高斯滤波是对整幅图像进行 加权平均的过程 ,每一个像素点的值都由其本

    2024年02月05日
    浏览(69)
  • OpenCV-Python学习(20)—— OpenCV 图像几何变换之图像旋转(cv.warpAffine、cv.getRotationMatrix2D、cv.rotate、np.rot90)

    1. 学习目标 学习旋转矩阵; 学习使用 OpenCV 的 cv.warpAffine 函数进行图片的旋转; 学习使用 OpenCV 的 cv.getRotationMatrix2D 来计算不同旋转中心的不同角度的 MAR 旋转变换矩阵; 学习使用 OpenCV 的 cv.rotate 进行特殊角度的旋转(90,180,270 度)。 2. 不同中心的旋转矩阵计算 2.1 图像

    2024年02月09日
    浏览(42)
  • 【OpenCV】仿射变换中cv2.estimateAffine2D 的原理

    目录 一、介绍 二、仿射变换矩阵 (M) 1.M中六个元素的说明 2.计算旋转角度 3.M的计算过程 三、输出状态 (inliers) 四、错切参数 1.错切参数的定义 2.错切参数例子 (1)水平错切 (2)垂直错切         cv2.estimateAffine2D 是 OpenCV 库中的一个函数,用于估计两个二维点集之间的

    2024年02月04日
    浏览(47)
  • 编译OpenCV 4.7.0 无法解析的外部符号 cv::xfeatures2d::VGG::getDefaultName 问题解决

    最近做特征匹配,需要用到xfeatures2d中的特征,源码编译OpenCV 4.7.0及opencv_contrib-4.7.0中的xfeatures2d模块,在Visual Studio 2019中编译生成库时,有以下报错 严重性    代码    说明    项目    文件    行    禁止显示状态    禁止显示状态 错误    LNK2001    无法解析的外

    2024年02月14日
    浏览(48)
  • 函数cv2.xfeatures2d.SIFT_create().detectAndCompute()的返回值

    在学习sift进行图像拼接程序时,发现别人写的代码里有一块知识不懂。 注: 一般建立sift生成器是用函数 cv2.xfeatures2d.SIFT_create() 。这里使用的opencv版本是4.5.5,建议opencv版本是4.0以上时使用 cv2.SIFT_create()。 sift因为是有版权的,opencv版本中有3.4.2.16可以直接使用 cv2.xfeatures2d

    2023年04月08日
    浏览(36)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包