OpenCV中利用sobel算子进行边缘检测

本文档展示了如何使用OpenCV库中的Sobel算子进行边缘检测。首先,通过OTSU函数自动计算最佳阈值进行灰度图像二值化。然后,应用Sobel算子计算图像的水平和垂直梯度,最后将结果叠加并显示边缘图像。
摘要由CSDN通过智能技术生成
#include "opencv2/imgproc/imgproc.hpp"  
#include "opencv2/highgui/highgui.hpp"  
#include <iostream>  
#include <cmath>

using namespace cv;
using namespace std;

bool sobelEdge(Mat&  srcImage, Mat& resultImageX, Mat& resultImageY, uchar threshold)
{
	CV_Assert(srcImage.channels() == 1);
	// 初始化水平核因子
	Mat sobelx = (Mat_<double>(3, 3) << -1, 0,
		1, -2, 0, 2, -1, 0, 1);
	// 初始化垂直核因子
	Mat sobely = (Mat_<double>(3, 3) << -1, -2, -1,
		0, 0, 0, 1, 2, 1);
	resultImageX = Mat::zeros(srcImage.rows - 2,
		srcImage.cols - 2, srcImage.type());
	resultImageY = Mat::zeros(srcImage.rows - 2,
		srcImage.cols - 2, srcImage.type());
	double edgeX = 0;
	double edgeY = 0;
	double graMagX = 0;// 垂直方向上的梯度模长
	double graMagY = 0;// 水平方向上的梯度模长
	for (int k = 1; k < srcImage.rows - 1; ++k) 
	{
		for (int n = 1; n < srcImage.cols - 1; ++n) 
		{
		
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值