cv::filter2D 函数可以对图像进行线性滤波。
函数可以对图像进行线性滤波。该函数使用指定的卷积核对输入图像进行卷积,以计算输出图像中每个像素的值。
该函数的原型如下:
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 参数表示输出图像的深度,kernel 参数表示卷积核,anchor 参数表示锚点,delta 参数表示在将结果存储到输出图像之前添加到每个像素的可选值,borderType 参数表示边界填充类型。每个参数具体的详细解析见下:
src:输入图像。
dst:输出图像,与输入图像大小和通道数相同。
ddepth:输出图像的深度,可以设置为 -1,表示与输入图像深度相同。
kernel:卷积核,用于对图像进行滤波。
anchor:锚点,表示卷积核中心的位置。默认值为 (-1,-1),表示卷积核中心位于卷积核的中心。
delta:在将结果存储到输出图像之前添加到每个像素的可选值。默认值为 0。
borderType:边界填充类型,用于指定如何处理边界像素。默认值为 cv::BORDER_DEFAULT。
参数ddepth表示的图像深度分别有:
CV_8U:8 位无符号整数。
CV_16U:16 位无符号整数。
CV_16S:16 位有符号整数。
CV_32F:32 位浮点数。
CV_64F:64 位浮点数。
此外,您还可以将 ddepth 参数设置为 -1,表示输出图像的深度与输入图像的深度相同。
参数borderType还有以下边界填充类型:
cv::BORDER_CONSTANT:使用常数填充边界。
cv::BORDER_REPLICATE:复制最后一个元素来填充边界。
cv::BORDER_REFLECT:在边界处反射图像内容来填充边界。
cv::BORDER_WRAP:在边界处环绕图像内容来填充边界。
cv::BORDER_REFLECT_101:与 cv::BORDER_REFLECT 类似,但在反射时不包括最后一个元素。
cv::BORDER_TRANSPARENT:忽略边界像素。
cv::BORDER_DEFAULT:默认值,等同于 cv::BORDER_REFLECT_101
下面是一个简单的示例,它展示了如何使用 cv::filter2D 函数对图像进行高斯模糊:
#include <opencv2/opencv.hpp>
int main() {
cv::Mat src = cv::imread("image.jpg"); // 输入图片路径
cv::Mat dst;
cv::Mat kernel = (cv::Mat_<float>(3,3) << 1/16.0, 2/16.0, 1/16.0, 2/16.0, 4/16.0, 2/16.0, 1/16.0, 2/16.0, 1/16.0);
cv::filter2D(src, dst, -1, kernel);
cv::imshow("src", src);
cv::imshow("dst", dst);
cv::waitKey(0);
return 0;
}
测试结果如下图所示:文章来源:https://www.toymoban.com/news/detail-513225.html
文章来源地址https://www.toymoban.com/news/detail-513225.html
到了这里,关于图像平滑处理:cv::filter2D()函数详解的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!