C++ 计算图像的y导数

C++ 计算图像的y导数,c++,opencv,derivative,C++,Opencv,Derivative,我想实现图像的y导数。 以下是使用Sobel运算符的openCV函数: Sobel(灰色输入图片、y衍生图片、CV 32FC1、0、1、3、边框默认) 下面是一个示例: 现在我需要自己实现它,而不使用这个sobel函数 我在这里找到了一些帮助: 我现在实施的是: for(int x=0; x<gray_input_picture.rows; x++) { for(int y=0; y<gray_input_picture.cols; y++) { if

我想实现图像的y导数。 以下是使用Sobel运算符的openCV函数:

Sobel(灰色输入图片、y衍生图片、CV 32FC1、0、1、3、边框默认)

下面是一个示例:

现在我需要自己实现它,而不使用这个sobel函数

我在这里找到了一些帮助:

我现在实施的是:

for(int x=0; x<gray_input_picture.rows; x++)
{
    for(int y=0; y<gray_input_picture.cols; y++)
    {
       if(x == gray_input_picture.rows-1 || x == 0)
       {
           y_derivative.at<Vec3b>(x,y) = gray_input_picture.at<Vec3b>(x,y);
       }
       else
       {
           Vec3b color;
           color[0] = gray_input_picture.at<Vec3b>(x+1,y)[0] - gray_input_picture.at<Vec3b>(x-1,y)[0];
           color[1] = gray_input_picture.at<Vec3b>(x+1,y)[1] - gray_input_picture.at<Vec3b>(x-1,y)[1];
           color[2] = gray_input_picture.at<Vec3b>(x+1,y)[2] - gray_input_picture.at<Vec3b>(x-1,y)[2];
           y_derivative_picture.at<Vec3b>(x,y) = color;
       }
    }
}

bitwise_not ( y_derivative_picture, y_derivative_picture2 );

for(int x=0;x我想您可能需要查看Sobel运算符在这里的作用:


我注意到的一件事是,你在减去无符号字符。这是自找麻烦。另外,给像素分配上下像素值的差值并不是Sobel真正做的事情。借助于此,我终于解决了我的问题