OpenCV笔记(十五)——使用Laplace算子进行图像的边缘检测
在笔记十四中,我们使用了Sobel算子对图像进行边缘检测,理论依据是像素变化最快的地方最有可能是边缘处,所以使用sobel算子对图像做微分,得到的结果图像当中灰度较大的区域,即为边缘处。
在这里,我们使用Laplace算子来做边缘检测,也是类似的道理,只不过换成了二阶微分,在一阶微分的极大值的地方,二阶微分为零。我们以二阶微分为零的区域作为边缘。当然了一阶微分极小值的地方,即图像变化很慢很慢的地方,二阶微分也可能为零。所以我们还需要进行额外的滤波。
在理论上是这样,但是在实现上,OpenCV使用了类似sobel算子的方法,并且在Laplace算子的运用中,一行二阶微分和列二阶微分的加法结合在一起,用一个kernel计算完毕。
先看看OpenCV当中运用Laplace算子的函数:
void cv::Laplacian( InputArray _src, OutputArray _dst, int ddepth, int ksize, double scale, double delta, int borderType )
使用方式和Sobel相似。
部分实现代码如下:
1 if( ksize == 1 || ksize == 3 ) 2 { 3 float K[2][9] = 4 {{0, 1, 0, 1, -4, 1, 0, 1, 0}, 5 {2, 0, 2, 0, -8, 0, 2, 0, 2}}; 6 Mat kernel(3, 3, CV_32F, K[ksize == 3]); 7 if( scale != 1 ) 8 kernel *= scale; 9 filter2D( src, dst, ddepth, kernel, Point(-1,-1), delta, borderType ); 10 }
OpenCV中使用Laplacian的例子:

1 int main( int, char** argv ) 2 { 3 4 Mat src, src_gray, dst; 5 int kernel_size = 3; 6 int scale = 1; 7 int delta = 0; 8 int ddepth = CV_16S; 9 const char* window_name = "Laplace Demo"; 10 11 /// Load an image 12 src = imread( argv[1] ); 13 14 if( !src.data ) 15 { return -1; } 16 17 /// Remove noise by blurring with a Gaussian filter 18 GaussianBlur( src, src, Size(3,3), 0, 0, BORDER_DEFAULT ); 19 20 /// Convert the image to grayscale 21 cvtColor( src, src_gray, COLOR_RGB2GRAY ); 22 23 /// Create window 24 namedWindow( window_name, WINDOW_AUTOSIZE ); 25 26 /// Apply Laplace function 27 Mat abs_dst; 28 29 Laplacian( src_gray, dst, ddepth, kernel_size, scale, delta, BORDER_DEFAULT ); 30 convertScaleAbs( dst, abs_dst ); 31 32 /// Show what you got 33 imshow( window_name, abs_dst ); 34 35 waitKey(0); 36 37 return 0; 38 }
分类:
OpenCV
【推荐】还在用 ECharts 开发大屏?试试这款永久免费的开源 BI 工具!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 大模型 Token 究竟是啥:图解大模型Token
· 35岁程序员的中年求职记:四次碰壁后的深度反思
· 继承的思维:从思维模式到架构设计的深度解析
· 如何在 .NET 中 使用 ANTLR4
· 后端思维之高并发处理方案
· 感觉程序员要被 AI 淘汰了?学什么才有机会?
· MQTT协议发布和订阅的实现,一步步带你实现发布订阅服务。
· Dify开发必备:分享8个官方文档不曾解释的关键技巧
· 活动中台系统慢 SQL 治理实践
· “你觉得客户需要”是杀死TA的最后一根稻草 | IPD集成产品开发