opencv 图像处理之边缘检测

目录

[1. 简述](#1. 简述)

[2. Sobel 边缘检测](#2. Sobel 边缘检测)

[3. Canny 边缘检测](#3. Canny 边缘检测)


1**.** 简述

边缘的特征在于像素强度的突变。为了检测边缘,我们需要在相邻像素中寻找这种变化。OpenCV 提供了两种重要的边缘检测算法:Sobel 边缘检测和 Canny 边缘检测。

2. Sobel 边缘检测

Sobel 边缘检测是应用最广泛的边缘检测算法之一。Sobel 算子用于检测由像素强度突变所形成的边缘。

示例代码:

cpp 复制代码
void Test_Sobel()
{
	cv::Mat src = cv::imread("D:\\TestVideo\\guiyang_east_station.jpg");
	
	// Sobel edge detection
	Mat sobelx, sobely, sobelxy;
	Sobel(src, sobelx, CV_64F, 1, 0, 5);
	Sobel(src, sobely, CV_64F, 0, 1, 5);
	Sobel(src, sobelxy, CV_64F, 1, 1, 5);

	// Display Sobel edge detection images
	imshow("original image", src);

	imshow("Sobel X", sobelx);
	imshow("Sobel Y", sobely);
	imshow("Sobel XY using Sobel() function", sobelxy);
	
	waitKey(0);

	cv::destroyAllWindows();
}

调用结果:

原图:

垂直核,X 方向增强:

水平核,Y 方向增强:

双向增强:

3. Canny 边缘检测

Canny 边缘检测是当今最流行的边缘检测方法之一,因其具有极强的健壮性和灵活性而备受青睐。该算法本身包含从图像中提取边缘的三个阶段;若加上旨在降低噪声的必要预处理步骤------图像模糊,则构成了一个包含以下四个阶段的过程:

(1) 降噪

(2) 计算图像的强度梯度

(3) 抑制伪边缘

(4) 滞后阈值处理

示例代码:

cpp 复制代码
void Test_Canny()
{
	cv::Mat src = cv::imread("D:\\TestVideo\\guiyang_east_station.jpg");

	Mat dst;
	Canny(src, dst, 100, 200, 3, false);
	imshow("Canny edge detection", dst);

	waitKey(0);

	cv::destroyAllWindows();
}

运行结果:

相关推荐
2601_9545267517 分钟前
2026 生成式搜索引擎底层技术演进与 GEO优化服务商推荐:大模型检索增强(RAG)管道与语义对齐工程实战
大数据·人工智能·搜索引擎
我有满天星辰21 分钟前
Spring AI Prompt 实战:System Prompt、User Prompt 与 PromptTemplate
人工智能·spring·prompt
A153625525 分钟前
WMS 仓储管理系统推荐:企业如何选适配的仓储管理系统
大数据·人工智能
学习中.........28 分钟前
Transformer 训练资源估算:以 CS336 GPT-2 XL 配置为例
人工智能·python·算法·机器学习·自然语言处理
Setsuna_F_Seiei5 小时前
前端的 AI 学习之路 02 之 Provider 与 Structured Output - 规范化模型输入输出
人工智能·agent·ai编程
JavaPub-rodert5 小时前
王仕宇RAG 实战教程(二):从 0 搭建一个可运行的 RAG 知识库——Embedding、Qdrant 与问答实战
人工智能·embedding
Setsuna_F_Seiei6 小时前
前端的 AI 学习之路 01 之 Agent API 调用 - 和 Agent 的基础对话
前端·人工智能·ai编程
咔咔学姐kk6 小时前
小白程序员必收藏:轻松入门AI Agent开发,大厂校招新风口!
人工智能·深度学习·ai·程序员·大模型·就业·大模型学习
2601_967097226 小时前
园区巡检机器人推荐:4项评估维度与主流产品横评
大数据·人工智能·信息可视化
stuartevil7 小时前
零基础怎么用AI文生漫剧做出一条完整视频
人工智能·音视频