理论:

在二阶导数的时候,最大变化处的值为0,即边缘是零,通过二阶导数计算,依据此理论我们可以计算图像的二阶导数,提取边缘。

Laplance算子
二阶导数我不会,别担心->拉普拉斯算子(Laplanceoperator)
Opencv已经提供了相关APl- cv::Laplance

处理流程:

高斯模糊-去噪声GaussianBlur()

转换为灰度图像cvtColor()
拉普拉斯-二阶导数计算Laplacian()

取绝对值convertScaleAbs()
显示结果

代码:
#include<opencv2/opencv.hpp> #include<iostream> using namespace cv; int
main(int argc, char** argv) { Mat src, dst; src =
imread("C:/Users/ThinkPad/Desktop/1.PNG"); if (!src.data) { printf("could not
find"); return -1; } namedWindow("demo", cv::WINDOW_AUTOSIZE); imshow("demo",
src); Mat gray_src, edge_image; //高斯模糊 GaussianBlur(src, dst, Size(3, 3), 0,
0); //转为灰度图 cvtColor(dst, gray_src, COLOR_BGR2GRAY); //拉普拉斯操作
Laplacian(gray_src, edge_image, CV_16S, 3); //绝对值转换 convertScaleAbs(edge_image,
edge_image); //处理边缘图像 threshold(edge_image, edge_image, 0, 255, THRESH_OTSU |
THRESH_BINARY); imshow("final result", edge_image); waitKey(0); return 0; }
在没有进行处理时的拉普拉斯操作,可以看到噪声有点严重。 

添加threshold进行处理之后:

threshold(edge_image, edge_image, 0, 255, THRESH_OTSU | THRESH_BINARY);

 

技术
©2019-2020 Toolsou All rights reserved,
Python学习笔记(一)Linux【shell】 shell编程创建一个线程——— Javaweb (3)evo工具使用问题——Degenerate covariance rank, Umeyama alignment is not possibleVMware 16安装centos 7详细教程C语言做一个简易的登陆验证(功能)界面C语言——qsort函数Spring Boot面试必问:自动配置原理Android EditText密码显示隐藏Qt入门教程【基础控件篇】QCalendarWidget日历控件