OpenCV学习笔记 imgproc库1.线性滤波

    科技2025-01-05  103

    使用-快速上手

    参考该博客 三.浅出 部分

    原理

    线性滤波输出像素值,f为输入图像,h为核 g ( i , j ) = ∑ k , l f ( i + k , j + l ) ∗ h ( k , l ) g(i,j)=\sum\limits_{k,l} f(i+k,j+l)*h(k,l) g(i,j)=k,lf(i+k,j+l)h(k,l)

    方框滤波

    void boxFilter(InputArray src, OutputArray dst, int ddepth, Size ksize, Point anchor=Point(-1,-1), bool normalize=true, int borderType=BORDER_DEFAULT);

    参数

    src输入图像dst目标图像ddepth输出图像的深度,-1代表使用原图深度ksize内核的大小,用Size(w,h)表示,w为像素宽度,h为像素高度anchor锚点,如果该点坐标为负值表示取核的中心点为锚点normalize内核是否被其区域归一化borderType用于推断图像外部像素的某种边界模式

    该函数所用的核为 K = a [ 1 ⋯ 1 ⋮ ⋱ ⋮ 1 ⋯ 1 ] K=a \left [ \begin{matrix} 1 & \cdots & 1 \\ \vdots & \ddots & \vdots \\ 1 & \cdots & 1 \end{matrix} \right ] K=a1111 当normalize=true时, a = 1 w ∗ h a=\frac{1}{w*h} a=wh1 当normalize=false时, a = 1 a=1 a=1 下面说到的均值滤波其实就是normalize=true时的方框滤波

    均值滤波

    实际上这个函数基本上就是直接调用了boxFilter()

    void blur(InputArray src, OutputArray dst, Size ksize, Point anchor=Point(-1,-1), int borderType=BORDER_DEFAULT);

    参数基本同上

    高斯滤波

    使用示例

    #include <opencv2/opencv.hpp> using namespace cv; int main(int argc, char* argv[]) { Mat src; src = imread("D:/Doucuments/temp/opencv_cpp/aete.jpg"); Mat bdst, gbdst; blur(src, bdst, Size(20, 20)); GaussianBlur(src, gbdst, Size(11, 11), 10, 10); namedWindow("src"); namedWindow("blur"); namedWindow("gblur"); imshow("src", src); imshow("blur", bdst); imshow("gblur", gbdst); waitKey(0); return 0; }
    Processed: 0.013, SQL: 8