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;
}
 
                    
                
 
                
            
         浙公网安备 33010602011771号
浙公网安备 33010602011771号