2016-09-28 3 views
1

[! [Hier ist das image-skelt.tif (img)] [1]] [1] Ich suche nach dem Mat-Element, angl (Gradientwinkel) . Wenn ich jedoch die Anweisung .at verwende, wird ein Fehler ausgegeben.Fehler bei der Verwendung des .at-Operators openCV (C++)

Ich habe bereits nach NULL-Bild überprüft (angl.data == NULL). Dies ist kein NULL-Bild. Hier

ist der Code:

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

Der Fehler ist in den Orten, wo der Operator .at verwendet wird. Der Fehler ist -

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 

Ich kann diesen Fehler nicht debuggen.

+0

also zuerst laden Sie Ihr Bild als Graustufen mit 'imread (" skelt.tif ", 0)', um sicherzustellen, dass es einen Kanal hat. Dann erstellst du grad_x und grad_y als 'CV_16U', aber deine' Sobel' Ausgabe ist 'CV_32F' – PSchn

+0

was ist die Größe der skelt.tif? img.rows, img.cols? – GpG

+0

@GpG Die Größe von skelt.tif ist [665 X 489] – Vin

Antwort

0

Ihr Bild angl ist nicht die Größe oder Art, die Sie denken, es ist oder leer ist.

Versuchen Sie, die Art mit angl.type() und Größe mit angl.rows angl.cols

Überprüfung Wenn es ein Problem gibt es wohl in der Phase() -Aufruf ist, die wir nicht haben, sind Sie sicher, dass Sie das angl Bild modifizieren und nicht eine Kopie ?

+0

phase() ist opencvs Funktion ... – GpG

+0

Die Größe von img ist [665 X 489]. img.rows = 489, img.cols = 665 und img.dims = 2, img.type = CV_32F. – Vin

0

Im schlimmsten Fall können Sie in OpenCV debuggen, um die Variablen bei diesem Assert-Aufruf zu überprüfen, der den Fehler auslöst. Dazu müssen Sie die Quelle Ihrer OpenCV-Version herunterladen und dem Debugger mitteilen, wo sich die Quelldateien befinden.

Sobald Sie das Debuggen der OpenCV-Quelle eingerichtet haben, können Sie einfach mit Ihrem Debugger in den .at-Aufruf springen, um zu sehen, welcher Teil der Assert-Bedingung fehlschlägt.

Verwandte Themen