美文网首页
015-Opencv笔记-自定义线型滤波

015-Opencv笔记-自定义线型滤波

作者: 赌二八定律 | 来源:发表于2020-03-19 11:05 被阅读0次
卷积

卷积是图像处理中一个操作,是kernel在图像的每个像素上的操作
Kernel本质上一个固定大小的矩阵数组,其中心点称为锚点


卷积是怎么工作的

以上图3*3的算子为例,在图像边缘的一圈像素是卷积没办法覆盖处理的,这需要边缘相关知识解决

常见的算子

Robert算子 1,0,0,-1 和 0,1,-1,0


Sobel算子 -1,0,1,-2,0,2,-1,0,1 和 -1,-2,-1,0,0,0,1,2,1


拉普拉斯算子 0,-1,0,-1,4,-1,0,-1,0


filter2D方法filter2D(
Mat src, //输入图像
Mat dst, // 模糊图像
int depth, // 图像深度32/8
Mat kernel, // 卷积核/模板
Point anchor, // 锚点位置
double delta // 计算出来的像素+delta
)
其中 kernel是可以自定义的卷积核

#include "pch.h"
#include <opencv2/opencv.hpp>
#include <iostream>
#include <math.h>

using namespace cv;
int main(int argc, char** argv) {
    Mat src, dst;
    int ksize = 0;

    src = imread("D:/11.jpg");
    if (!src.data) {
        printf("could not load image...\n");
        return -1;
    }

    imshow("src", src);
    
    // Sobel X 方向
     Mat kernel_x = (Mat_<int>(3, 3) << -1, 0, 1, -2,0,2,-1,0,1);
     filter2D(src, dst, -1, kernel_x, Point(-1, -1), 0.0);
     imshow("ximg", dst);

     //Sobel Y 方向
     Mat yimg;
     Mat kernel_y = (Mat_<int>(3, 3) << -1, -2, -1, 0,0,0, 1,2,1);
     filter2D(src, yimg, -1, kernel_y, Point(-1, -1), 0.0);
     imshow("yimg", yimg);

     //拉普拉斯算子
     Mat limg;
    Mat lpls = (Mat_<int>(3, 3) << 0, -1, 0, -1, 4, -1, 0, -1, 0);
    filter2D(src, limg, -1, lpls, Point(-1, -1), 0.0);
    imshow("limg",limg);

    waitKey(0);
    return 0;
}

相关文章

网友评论

      本文标题:015-Opencv笔记-自定义线型滤波

      本文链接:https://www.haomeiwen.com/subject/xdbxehtx.html