2016-09-28 16 views
1

[![ここにimage-skelt.tif(img)] [1]] [1] Matエレメント、angl(勾配角度) 。しかし、.atステートメントを使用すると、エラーがスローされます。.at演算子を使用しているエラーopenCV(C++)

私はすでにNULLイメージ(angl.data == NULL)をチェックしています。これはNULLイメージではありません。

Mat img = imread("skelt.tif"); // this is a binary image 
    Mat grad_x(img.rows, img.cols, CV_16U); 
    Mat grad_y(img.rows, img.cols, CV_16U); 
    Mat angl; 
    Sobel(img, grad_x, CV_32F, 1, 0, 3);// Gradient X 
    Sobel(img,grad_y, CV_32F, 0, 1, 3); // Gradient Y 
    phase(grad_x, grad_y, angl,true); 
    cout << angl.at<float>(51, 5) << endl; // the dimensions are randomly chosen and are within the image 
    cout<<angl.ptr(5)[4]; 

エラーが.ATオペレータが使用される場所である:ここ

コードです。エラーは -

OpenCV Error: Assertion failed (dims <= 2 && data && (unsigned)pt.y < (unsigned) 
size.p[0] && (unsigned)(pt.x * DataType<_Tp>::channels) < (unsigned)(size.p[1] * 
channels()) && ((((sizeof(size_t)<<28)|0x8442211) >> ((DataType<_Tp>::depth) & 
((1 << 3) - 1))*4) & 15) == elemSize1()) in cv::Mat::at, file c:\opencv\build\in 
clude\opencv2/core/mat.inl.hpp, line 912 

このエラーをデバッグすることはできません。

+0

だから、画像がグレースケールで 'imread(" skelt.tif "、0)'で読み込まれ、チャンネルが1つであることを確認してください。次にgrad_xとgrad_yを 'CV_16U'として作成しますが、あなたの' Sobel'出力は 'CV_32F'です – PSchn

+0

skelt.tifのサイズは? img.rows、img.cols? – GpG

+0

@GpG skelt.tifのサイズは[665 X 489] – Vin

答えて

0

あなたのイメージanglは、あなたが思うサイズまたはタイプではなく、空です。

あなたはANGLの画像を変更していないことを確認している、それはおそらく、私たちが持っていない段階で()の呼び出しで問題がある場合はangl.rows angl.cols

angl.type()とサイズと種類をチェックしてみコピー ?

+0

phase()はopencvの関数です... – GpG

+0

imgのサイズは[665 X 489]です。 img.rows = 489、img.cols = 665、img.dims = 2、img.type = CV_32F。 – Vin

0

最悪の場合、OpenCVにデバッグして、そのアサートコールでエラーをスローする変数をチェックすることができます。これを行うには、OpenCVバージョンのソースをダウンロードし、ソースファイルの場所をデバッガに伝える必要があります。

OpenCVソースのデバッグを設定したら、デバッガを使用して.at呼び出しにジャンプして、アサート条件のどの部分が失敗するかを確認できます。

関連する問題