0

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

在此处输入图像描述

#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;
}
4

1 回答 1

1

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

//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;

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

于 2013-07-31T22:48:22.537 回答