1. C/C++

OpenCV-第十六话-Laplace算子

一.写在前面

Laplace就是求二阶导

在二阶导数的时候,最大变化处的值为零即边缘是零值。通过二阶

导数计算,依据此理论我们可以计算图像二阶导数,提取边缘。

Q二阶导数我不会

A别担心 ->拉普拉斯算子(Laplance operator);Opencv已经提供了相关API – cv::Laplance

 

二.处理流程

1高斯模糊 – 去噪声GaussianBlur()

2转换为灰度图像cvtColor()

3拉普拉斯 – 二阶导数计算Laplacian()

4取绝对值convertScaleAbs()

5显示结果

三.相关API

Laplacian(
InputArray src,
OutputArray dst,
int depth, //深度CV_16S
int kisze, // 3
double scale = 1,
double delta =0.0,
int borderType = 4
)

 

四.代码实现

/*
OpenCV Laplace算子学习
Michael Jiang<sencom1997@outlook.com>
2019年7月26日06:53:08
*/

#include <opencv2/opencv.hpp>
#include <iostream>

using namespace cv;

int main()
{
	Mat src, dst, gray, fin;

	//读取图像
	src = imread("D:/linus.jpg", IMREAD_COLOR);

	//判断读取是否成功
	if (src.empty()) {
		printf("pic load failed!\n");
		return -1;
	}
	imshow("src", src);

	//高斯模糊
	GaussianBlur(src, dst, Size(3, 3), 0, 0, BORDER_DEFAULT);

	//转灰度
	cvtColor(dst, gray, COLOR_BGR2GRAY);

	//Laplace算子
	Laplacian(gray, fin, CV_16S,3);
	convertScaleAbs(fin, fin);

	imshow("fin", fin);

	waitKey(0);
	return 0;
}