揭阳专业做网站,深圳系统网站开发,仿v电影的模板?好像是wordpress,wordpress 一键恢复本文通过函数详解和运行示例对cv::GaussianBlur和cv::filter2D()两个函数进行解读#xff0c;最后综合了两个函数的关系和区别#xff0c;以帮助大家理解和使用。 目录 cv::GaussianBlur#xff08;#xff09;函数详解运行示例 filter2D()函数详解运行示例 总结两个函数联…本文通过函数详解和运行示例对cv::GaussianBlur和cv::filter2D()两个函数进行解读最后综合了两个函数的关系和区别以帮助大家理解和使用。 目录 cv::GaussianBlur函数详解运行示例 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) 等。
sigmaXX方向的标准差。这是高斯核在X方向上的宽度。
sigmaYY方向的标准差。这是高斯核在Y方向上的宽度。如果sigmaY为0则函数会自动根据kernel大小来计算sigmaY如果sigmaX和sigmaY都为0那么这两个参数都会被设置为cv::DBL_MAX。如果sigmaY不为0而sigmaX为0那么sigmaX会被设置为等于sigmaY。
borderType像素外插法有默认值。运行示例
#include opencv2/opencv.hpp
#include iostreamusing 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() 来显示原始图像和模糊后的图像。 上面为原图下面为滤波后图像。可以看出远处的高楼变得模糊了。可以调整核大小和偏差修改相应的效果。
filter2D()
函数详解
filter2D() 是 OpenCV 库中的一个函数用于对图像进行线性滤波。它使用指定的核来对输入图像进行卷积以实现平滑、锐化、边缘检测等效果。
void cv::filter2D(InputArray src, OutputArray dst, int ddepth, InputArray kernel, Point anchorPoint(-1,-1), double delta0, int borderTypeBORDER_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 iostreamusing 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() 来显示原始图像和模糊后的图像。 具体效果如下下面是原图。 下面的是模糊处理后的效果图。 上面是模糊处理后的效果图下面是经过filter2D函数处理后的效果图可以通过调整核函数大小调整效果。
总结
两个函数联系
1cv::GaussianBlur()是使用高斯滤波器对图像进行模糊处理而cv::filter2D()可以应用各种滤波器对图像进行滤波处理。
2在使用cv::GaussianBlur()时需要指定高斯核的大小和标准差参数而在使用cv::filter2D()时需要指定一个滤波器作为参数该滤波器可以是一个自定义的滤波器也可以是高斯滤波器。
两个函数区别
1cv::GaussianBlur()仅适用于高斯模糊处理而cv::filter2D()可以应用于各种滤波器包括高斯滤波器、中值滤波器、边缘检测滤波器等。 2cv::GaussianBlur()函数需要提供滤波器中系数的数量作为函数的第3个参数而cv::filter2D()函数不需要提供滤波器中系数的数量。 3cv::GaussianBlur()函数仅支持对图像进行二维滤波处理而cv::filter2D()函数可以支持对图像进行二维或三维滤波处理。