Opencv--Laplacian算子

Laplace 算子

目标

  • 使用OpenCV函数cv :: Laplacian来实现Laplace运算符的离散模拟。

理论

  • 在上一个教程中,我们学习了如何使用Sobel操作符。这是基于以下事实:在边缘区域中,像素强度显示“跳跃”或强度的高变化。得到强度的一阶导数,我们观察到边缘的特征是最大值,如图所示:

Laplace Operator

  • 和...如果我们采取二阶导数会发生什么?

Laplace Operator

您可以观察到二阶导数为零!因此,我们也可以使用此标准来尝试检测图像中的边缘。然而,请注意,零不仅会出现在边缘(它们实际上可以出现在其他无意义的位置); 这可以通过在需要时应用过滤来解决。

 

Laplace Operator

  • 从上面的解释,我们推导出二阶导数可以用来检测边缘。由于图像是“* 2D *”,所以我们需要在两个维度上使用导数。在这里,Laplace Operator很方便。
  • Laplace Operator被定义为:

Laplace Operator算法

  • 拉普拉斯运算符通过函数cv :: Laplacian在OpenCV中实现。事实上,由于拉普拉斯算子使用图像的梯度,所以它在内部调用Sobel算子来执行其计算。

Code

  • 这个程序是做什么的?
  1. 加载图像
  2. 用高斯模糊来消除噪点
  3. 将原始图像转换为灰度
  4. 将Laplace Operator应用于灰度图像
  5. 在窗口中显示结果
  • 代码如下:
#include <opencv2/opencv.hpp>
#include <iostream>

using namespace cv;

int main(int argc, char** argv) {

	Mat src = imread("C:/usr/opencv-test/Testpictures/sight.jpg"); // by default
	Mat edge_image, gray_src,dst;
	if (src.empty())
	{
		printf("image load failed!\n");
		return -1;
	}
	namedWindow("input image", CV_WINDOW_AUTOSIZE);
	imshow("input image", src);


	GaussianBlur(src, dst, Size(3, 3), 0, 0);  //高斯模糊,去噪,使平滑
	cvtColor(dst, gray_src, CV_BGR2GRAY); //转为灰度

	//	Laplacian算子								 
	Laplacian(gray_src, edge_image, CV_16S, 3);
	convertScaleAbs(edge_image, edge_image);
	

	imshow("edge_image", edge_image);

	//imshow("output image", gray_src);

	waitKey(0);
	return 0;

}

 

结果

  • 在编译上面的代码之后,我们可以运行它作为参数作为图像的路径。例如,使用作为输入:

 

  • 我们得到以下结果:
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值