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++ APICvArr*からのもので、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 に答える