[![ここに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
このエラーをデバッグすることはできません。
だから、画像がグレースケールで 'imread(" skelt.tif "、0)'で読み込まれ、チャンネルが1つであることを確認してください。次にgrad_xとgrad_yを 'CV_16U'として作成しますが、あなたの' Sobel'出力は 'CV_32F'です – PSchn
skelt.tifのサイズは? img.rows、img.cols? – GpG
@GpG skelt.tifのサイズは[665 X 489] – Vin