概述
Laplacian(拉普拉斯)算子是一种二阶导数算子,其具有旋转不变性,可以满足不同方向的图像边缘锐化(边缘检测)的要求。
通常情况下,其算子的系数之和需要为零。例 如,一个3×3大小的Laplacian算子如图所示。
Laplacian算子比Sobel算子、Scharr算子语法更为简单,不需要在x,y两个方向分别进行检测,检测效果与Sobel算子、Scharr算子相差不大。
函数
void cv::Laplacian
(
InputArray src,
OutputArray dst,
int ddepth,
int ksize = 1,
double scale = 1,
double delta = 0,
int borderType = BORDER_DEFAULT
)
src | 源图像 |
dst | 输出图像 |
ddepth | 输出图像的深度 CV_8U CV_16U CV_32F CV_64F |
ksize | 计算二阶导数的核尺寸大小。 该值必须是正的奇数。 当ksize的值为1时,Laplacian算子计算时采用的 3×3的核。 |
scale | 计算的导数的可选比例因子(默认情况下不用缩放) |
delta | 可选的增量值,在将结果存储到dst之前添加到结果中 |
borderType | 图像边框扩展模式(可查阅BorderTypes,但不支持BORDER_WRAP) |
测试代码
#include "widget.h"
#include "ui_widget.h"
#include <opencv2/core/core.hpp>
#include <opencv2/highgui/highgui.hpp>
#include <opencv2/imgproc/imgproc.hpp>
using namespace cv;
Widget::Widget(QWidget *parent)
: QWidget(parent)
, ui(new Ui::Widget)
{
ui->setupUi(this);
//载入图像
cv::Mat src = imread("C:/opencv/board.jpg");
//显示
imshow("src",src);
//边缘检测
Mat dst;
Laplacian(src,dst,CV_8U);
//显示
imshow("dst",dst);
}
Widget::~Widget()
{
delete ui;
}