8.8canny算子检测

目录

实验原理

示例代码

运行结果


实验原理

在OpenCV中,Canny边缘检测是一种广泛使用的边缘检测算法。它是由John F. Canny在1986年提出的,并且因其性能优良而被广泛应用。在OpenCV中,Canny边缘检测是通过Canny函数实现的。

函数原型

void Canny(InputArray src, OutputArray edges, 
            double threshold1, double threshold2, 
            int apertureSize=3, bool L2gradient=false);


参数的含义如下:

src: 输入图像,应该是单通道的8位或者32位浮点型图像。
edges: 输出图像,也是单通道的8位图像,用来存放检测到的边缘。
threshold1: 第一个阈值(低阈值),用于弱边缘的检测。
threshold2: 第二个阈值(高阈值),用于强边缘的检测。
apertureSize: Sobel算子的尺寸,默认为3。
L2gradient: 如果设为true,则使用L2范数来计算梯度幅度;如果设为false,
         则使用L1范数(即|Gx| + |Gy|)。默认为false。

示例代码

以下是一个简单的C++程序示例,演示如何使用OpenCV中的Canny函数进行边缘检测:

#include <opencv2/opencv.hpp>
#include <iostream>


int main(int argc, char** argv)
{

	// 加载图像
	cv::Mat src = cv::imread("0.png", cv::IMREAD_COLOR); // 读取彩色图像
	if (!src.data) // 检查是否成功加载图像
	{
		std::cout << "Error loading image" << std::endl;
		return -1;
	}

	// 转换为灰度图像
	cv::Mat gray;
	cv::cvtColor(src, gray, cv::COLOR_BGR2GRAY);

	// 高斯模糊
	cv::Mat blurred;
	cv::GaussianBlur(gray, blurred, cv::Size(3, 3), 0);

	// Canny边缘检测
	cv::Mat edges;
	double threshold1 = 50; // 第一个阈值
	double threshold2 = 150; // 第二个阈值
	cv::Canny(blurred, edges, threshold1, threshold2);

	// 显示结果
	cv::namedWindow("Original Image", cv::WINDOW_NORMAL);
	cv::imshow("Original Image", src);
	cv::namedWindow("Detected Edges", cv::WINDOW_NORMAL);
	cv::imshow("Detected Edges", edges);

	// 等待按键,然后关闭所有窗口
	cv::waitKey(0);
	cv::destroyAllWindows();

	return 0;
}

基本步骤
读取图像 - 使用imread函数从文件中加载图像。
灰度转换 - 将彩色图像转换为灰度图像是必要的,因为Canny算法通常应用于单通道图像上。
高斯模糊 - 在进行边缘检测之前,通常会先对图像应用高斯滤波器以减少噪声。
Canny边缘检测 - 应用Canny边缘检测算法。
显示结果 - 显示原始图像和处理后的图像。

运行结果

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值