-
简介:本节学习承接上节Sobel算子的学习,本节是利用Laplace算子来进行边缘的提取。
Laplace算子简介:拉普拉斯算子(Laplace Operator)是n维欧几里德空间中的一个二阶微分算子,定义为梯度(▽f)的散度(▽·f)。拉普拉斯算子也可以推广为定义在黎曼流形上的椭圆型算子,称为拉普拉斯-贝尔特拉米算子。
而对于一个图像来说,其边缘是其像素变化最大的位置,也就是一阶导数最大的位置,而一阶导数最大的位置则为二阶导数为零的位置,则依据此理论我们可以计算图像的二阶导数来进行边缘的提取。
-
处理流程:
①高斯模糊—去除噪声GaussianBlur()
②转换为灰度图像cvtColor()
③拉普拉斯-二阶导数计算Laplacian()
④取绝对值convertScaleAbs()
⑤显示结果 -
用到的重要API——Laplacian
函数原型:CV_EXPORTS_W void Laplacian( InputArray src, OutputArray dst, int ddepth, int ksize = 1, double scale = 1, double delta = 0, int borderType = BORDER_DEFAULT );
第三个参数为位图深度,我们一般选择深度为CV_16S
第四个参数为ksize,我们一般选择其大小为3
最后一般为了显示效果更好我们通常还要对其进行阈值操作 -
实验代码及效果展示:
// test1.cpp: 定义控制台应用程序的入口点。 // #include "stdafx.h" #include<iostream> #include<opencv2\opencv.hpp> using namespace std; using namespace cv; int main() { Mat src, gray_src, dst; src = imread("G:/He/opencv_images/test.jpg"); if (src.empty()) { cout << "could not load the images" << endl; return -1; } namedWindow("origin_image", CV_WINDOW_AUTOSIZE); imshow("origin_image", src); GaussianBlur(src, src, Size(3, 3), 0, 0); cvtColor(src, gray_src, COLOR_BGR2GRAY); Laplacian(gray_src, dst, CV_16S, 3); convertScaleAbs(dst, dst); //进行图像阈值二值化处理 threshold(dst, dst, 0, 100, THRESH_OTSU | THRESH_BINARY); namedWindow("Laplace", CV_WINDOW_AUTOSIZE); imshow("Laplace", dst); waitKey(0); destroyAllWindows(); return 0; }
OpenCv学习17——Laplace算子
最新推荐文章于 2023-10-13 21:26:55 发布