1.图像中的卷积概念
卷积:图像处理中一个操作,是kernel在图像的每个像素上的操作。Kernel本质上一个固定大小的矩阵数组,其中心点称为锚点(anchor point)。把kernel放到像素数组之上,求锚点周围覆盖的像素乘积之和(包括锚点),用来替换锚点覆盖下像素点值称为卷积处理。前面笔记中的掩膜操作本质就是进行卷积处理。
2.常见算子(kernel)
(1)Robert算子
(2)Sobel算子(一阶导):增强水平垂直之间像素跃迁的差距,进行卷积处理时,如果调用API,算子将旋转180度进行计算
(3)Laplacian算子(二阶导)
3.简单代码实现
#include "stdafx.h"
#include <opencv2/opencv.hpp>
#include <iostream>
#include <math.h>
using namespace std;
using namespace cv;
char inputName[] = "input name";
char outputName[] = "output name";
int main()
{
Mat src, dst;
src = imread("D:/VS project/Image/people.jpg");
if (src.empty())
{
cout << "找不到图像!" << endl;
return -1;
}
namedWindow(inputName, CV_WINDOW_AUTOSIZE);
namedWindow(outputName, CV_WINDOW_AUTOSIZE);
imshow(inputName, src);
//Robert算子X方向
Mat kernelX = (Mat_<int>(2, 2) << 1, 0, 0, -1);
/*Mat kernelX = (Mat_<int>(3, 3) << -1, 0, 1, -2,0,2,-1,0,1);*///Sobel算子x方向
filter2D(src, dst, src.depth(), kernelX, Point(-1, -1), 0.0);
imshow("x", dst);
//Robert算子Y方向
Mat y;
Mat kernelY = (Mat_<int>(2, 2) << 0, 1, -1, 0);
filter2D(src, y, src.depth(), kernelY, Point(-1, -1), 0.0);
imshow("y", y);
waitKey(0);
return 0;
}