Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/131.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 在OpenCV中是否有一种快速简便的方法来计算图像的梯度?_C++_Opencv - Fatal编程技术网

C++ 在OpenCV中是否有一种快速简便的方法来计算图像的梯度?

C++ 在OpenCV中是否有一种快速简便的方法来计算图像的梯度?,c++,opencv,C++,Opencv,使用最新的OpenCV,是否有一种简单的方法来计算特定cv::Mat的渐变图像?假设您指的是典型的;你可以很容易地用Chris提到的操作符计算这些。看看索贝尔衍生工具教程。您可能还对运营商及其服务感兴趣 下面是使用Sobel计算X和Y渐变的一个简短片段: cv::Mat src = ...; // Fill the input somehow. cv::Mat Dx; cv::Sobel(src, Dx, CV_64F, 1, 0, 3); cv::Mat Dy; cv::Sobel(src

使用最新的OpenCV,是否有一种简单的方法来计算特定cv::Mat的渐变图像?

假设您指的是典型的;你可以很容易地用Chris提到的操作符计算这些。看看索贝尔衍生工具教程。您可能还对运营商及其服务感兴趣

下面是使用Sobel计算X和Y渐变的一个简短片段:

cv::Mat src = ...; // Fill the input somehow.

cv::Mat Dx;
cv::Sobel(src, Dx, CV_64F, 1, 0, 3);

cv::Mat Dy;
cv::Sobel(src, Dy, CV_64F, 0, 1, 3);

正如mevatron所说:Sobel算子和Laplace算子很强大,但不要忘记Scharr算子,它在3×3内核上的精度比Sobel算子更高。

从:,您可以:

IplImage * diffsizekernel(IplImage *img, int f, int c) {
    float dkernel[] =  {-1, 0, 1};

    CvMat kernel = cvMat(f, c, CV_32FC1, dkernel);

    IplImage *imgDiff = cvCreateImage(cvSize(img->width, img->height), IPL_DEPTH_16S, 1);

    cvFilter2D( img, imgDiff, &kernel, cvPoint(-1,-1) );

    return imgDiff;
}

IplImage * diffx(IplImage *img) {
    return diffsizekernel(img, 3, 1);
}

IplImage * diffy(IplImage *img) {
    return diffsizekernel(img, 1, 3);
}

一张示例图像,预期结果会很好。您正在寻找计算导数的Sobel运算符吗。