首页 > 代码库 > OpenCV官方文档学习记录(15)
OpenCV官方文档学习记录(15)
laplace边缘检测方式
不同于sobel的一阶导数式边缘检测,laplace算子是将图像的横纵都考虑进来的一种检测,主要使用的是二阶偏导数进行离散变换:
因为laplace也是使用分析梯度的方式进行变换,所以实际上调用的是sobel的方法。在上一篇上有体现,就是在两个方向上分别使用sobel计算结果。
代码如下:
1 #include <opencv2\opencv.hpp> 2 #include <iostream> 3 #include <string> 4 5 #pragma comment( linker, "/subsystem:\"windows\" /entry:\"mainCRTStartup\"" ) 6 7 using namespace std; 8 using namespace cv; 9 10 void Show(const std::string &name, const Mat &img)11 { 12 namedWindow(name, CV_WINDOW_AUTOSIZE);13 imshow(name, img);14 }15 16 int main(void)17 {18 Mat src = http://www.mamicode.com/imread("lena.jpg");19 if (src.empty())20 return -1;21 Mat src_gray, dst;22 int kernel_size = 3;23 int scale = 1;24 int delta = 0;25 int ddepth = CV_16S;26 string win_name = "laplace demo";27 GaussianBlur(src, src, Size(3, 3), 0, 0, BORDER_DEFAULT);28 cvtColor(src, src_gray, CV_RGB2GRAY);29 Show("Src", src);30 Mat abs_dst;31 Laplacian(src_gray, dst, ddepth, kernel_size, scale, delta, BORDER_DEFAULT);32 convertScaleAbs(dst, abs_dst);33 Show(win_name, abs_dst);34 waitKey();35 return 0;36 }
结果是:
摘一张sobel叠加处理后的结果:
虽然显然是soble处理叠加后的效果更好,但是比较起来还是laplace处理比较方便,能够减少代码。
实现过程与上一个的sobel的操作相类似:
1.将图像进行高斯模糊进行去噪;
2.将处理后的图像载入并转化为灰度图像;
3.进行laplace变换:参数分别是对应输入和输出,输出图像的色彩深度(就是矩阵的元素什么形式保存的),kernel的尺寸,其余都是现在我们未知的默认值;
4,将输出图像转化为与原输入深度一样的图像存储方式;
5.输出转化后的结果;
以上。
OpenCV官方文档学习记录(15)
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。