[! [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.
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
was ist die Größe der skelt.tif? img.rows, img.cols? – GpG
@GpG Die Größe von skelt.tif ist [665 X 489] – Vin