OpenCV-C++ Laplance算子
拉普拉斯理论说明
待补充;
Laplacian API使用介绍
计算图像的拉普拉斯算子,用于图像边缘检测;
OpenCV中Laplacian
的使用方式:
void Laplacian( InputArray src, OutputArray dst, int ddepth,
int ksize = 1, double scale = 1, double delta = 0,
int borderType = BORDER_DEFAULT );
该函数通过使用Sobel
算子计算出的二阶x,y
的导数相加来计算源图像的拉普拉斯算子:
\[dst = \Delta src = \dfrac{\partial^2 src}{\partial x^2} + \dfrac{\partial^2src}{\partial y^2}
\]
如果ksize=1
,则该函数计算拉普拉斯算子的方式是利用下面的核进行计算:
其中:
src
表示源图像;dst
表示输出;ddepth
表示输出位数,需要比源图像大;ksize
表示核大小;scale
表示缩放系数;delta
表示偏移量;borderType
表示对图像边界如何处理;
拉普拉斯算子实现图像边缘检测
类似于使用Sobel
进行图像边缘检测,包含以下步骤:
- 高斯模糊
- 转灰度图
- 拉普拉斯-计算二阶导数
- 取绝对值convertScaleAbs()
- 显示结果
结果如下:
完成程序如下:
#include <iostream>
#include <opencv2/opencv.hpp>
using namespace std;
using namespace cv;
/**
* 边缘处理
*/
int main(){
// 读取图像
Mat src = imread("/home/chen/dataset/lena.jpg");
if (src.empty()){
cout << "could not load image." << endl;
return -1;
}
namedWindow("src", WINDOW_AUTOSIZE);
imshow("src", src);
// 1. 高斯模糊
Mat srcBlur;
GaussianBlur(src, srcBlur, Size(3, 3), 0, 0);
// 2. 转灰度图
Mat srcGray;
cvtColor(srcBlur, srcGray, COLOR_BGR2GRAY);
cout << srcGray.type() << endl;
// 3. 拉普拉斯-计算二阶导数
Mat srcGrad;
Laplacian(srcGray, srcGrad, CV_16S, 3);
Mat dst;
convertScaleAbs(srcGrad, dst);
threshold(dst, dst, 0, 244, THRESH_OTSU);
namedWindow("dst", WINDOW_AUTOSIZE);
imshow("dst", dst);
waitKey(0);
return 0;
}