#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)
{
OpenCV中利用sobel算子进行边缘检测
最新推荐文章于 2024-09-15 20:26:20 发布
本文档展示了如何使用OpenCV库中的Sobel算子进行边缘检测。首先,通过OTSU函数自动计算最佳阈值进行灰度图像二值化。然后,应用Sobel算子计算图像的水平和垂直梯度,最后将结果叠加并显示边缘图像。
摘要由CSDN通过智能技术生成