#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-01-25 16:12:52 发布