小编CVi*_*ous的帖子

从索贝尔确定图像梯度方向?

我试图使用openCV的Sobel方法的结果确定图像梯度方向.

我明白这应该是一个非常简单的任务.我从这里复制了许多资源和答案的方法,但无论我做什么,结果方向总是在0到57度之间(我希望范围是0-360).

我相信所有的深度都是正确的.我尝试使用16S数据和8U数据计算方向.

我只是看不出我哪里出错了?谁能发现我的错误?

void getGradients(IplImage* original, cv::Mat* gradArray)
{
    cv::Mat original_Mat(original, true);

    // Convert it to gray
    cv::cvtColor( original_Mat, original_Mat, CV_RGB2GRAY );
    //cv::blur(original_Mat, original_Mat, cv::Size(7,7));

    /// Generate grad_x and grad_y
    cv::Mat grad_x = cv::Mat::zeros(original->height, original->width, CV_16S); 
    cv::Mat grad_y = cv::Mat::zeros(original->height, original->width, CV_16S);

    cv::Mat abs_grad_x = cv::Mat::zeros(original->height, original->width, CV_8U);
    cv::Mat abs_grad_y = cv::Mat::zeros(original->height, original->width, CV_8U);;

    /// Gradient X
    cv::Sobel(original_Mat, grad_x, CV_16S, 1, 0, 3);
    cv::convertScaleAbs( grad_x, abs_grad_x );

    /// Gradient Y
    cv::Sobel(original_Mat, grad_y, CV_16S, 0, 1, 3);
    cv::convertScaleAbs( grad_y, abs_grad_y …
Run Code Online (Sandbox Code Playgroud)

opencv gradient image-processing

6
推荐指数
2
解决办法
7816
查看次数

使用OpenCV的Sobel操作计算图像梯度方向

我试图使用OpenCV的Sobel方法的结果确定图像梯度方向.

我理解这应该是一个非常简单的任务,我想我理解这个理论,但实现这个比我想象的更具挑战性.

我希望渐变方向在0-360度之间,但是我的代码显示所有渐变都在180到270度之间.

我提交了此代码的先前版本,其中包含整数除法问题.我已经解决了这个问题,但它没有解决限制角度方向的问题.

我已经完成了所有代码,但我无法看到我出错的地方?谁能发现我的错误?

谢谢.

void getGradients(IplImage* original, cv::Mat* gradArray)
{
cv::Mat original_Mat(original, true);

// Convert it to gray
cv::cvtColor( original_Mat, original_Mat, CV_RGB2GRAY );
//cv::blur(original_Mat, original_Mat, cv::Size(7,7));

/// Generate grad_x and grad_y
cv::Mat grad_x = cv::Mat::zeros(original->height, original->width, CV_16S); 
cv::Mat grad_y = cv::Mat::zeros(original->height, original->width, CV_16S);

/// Gradient X
cv::Sobel(original_Mat, grad_x, CV_16S, 1, 0, 3);

/// Gradient Y
cv::Sobel(original_Mat, grad_y, CV_16S, 0, 1, 3);

uchar* pixelX = grad_x.data;
uchar* pixelY = grad_y.data;
uchar* grad1 = gradArray[0].data;
uchar* grad2 = gradArray[1].data;
uchar* …
Run Code Online (Sandbox Code Playgroud)

opencv image-processing computer-vision

4
推荐指数
1
解决办法
7807
查看次数