OpenCV:如何使用cvSobel?

时间:2013-07-31 22:39:34

标签: opencv

我正在尝试使用OpenCv 2.4.5从边缘找到渐变方向,但我遇到cvSobel()的问题,下面是错误消息和我的代码。我读到某处可能是由于浮点(??)之间的转换,但我不知道如何修复它。任何帮助??

enter image description here

#include <opencv2/highgui/highgui.hpp>
#include <opencv2/core/core.hpp>
#include <opencv2/imgproc/imgproc.hpp>
#include <opencv2\opencv.hpp>
#include <opencv2\calib3d\calib3d.hpp>

#include <iostream>
#include <stdlib.h>
#include "stdio.h"

using namespace cv;
using namespace std;

int main()
{
    Mat im = imread("test1.jpg");
    if (im.empty()) {
        cout << "Cannot load image!" << endl;
    }
    Mat *dx, *dy;
    dx = new Mat( Mat::zeros(im.rows, im.cols, 1)); 
    dy = new Mat( Mat::zeros(im.rows, im.cols, 1));

    imshow("Image", im);

    // Convert Image to gray scale
    Mat im_gray;
    cvtColor(im, im_gray, CV_RGB2GRAY);
    imshow("Gray", im_gray);

            //trying to find the direction, but gives errors here
    cvSobel(&im_gray, dx, 1,0,3);


    waitKey(0);
    return 0;
}

1 个答案:

答案 0 :(得分:1)

您正在混合使用C ++和C api。 cv :: Mat来自C ++ api,CvArr*来自C api。 在这里,你在C ++类上使用C api cvSobel

//trying to find the direction, but gives errors here
cvSobel(&im_gray, dx, 1,0,3);

如果你这样做会怎样?

cv::Sobel( im_gray, dx, im_gray.depth(), 1, 0, 3);

修改的 并声明

Mat dx;
Mat dy;

我认为这可能会解决您的问题,我实际上对您的代码编译感到非常惊讶。