卷积
卷积是图像处理中一个操作,是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;
}
网友评论