Этот код генерирует исключение только в режиме отладки. В версии, это дает ожидаемый результат 0.OpenCV mat :: at throwing exception
#include <opencv2\opencv.hpp>
#include <iostream>
using namespace cv;
using namespace std;
int main(){
Mat image;
image = Mat::zeros(5,5,CV_8UC1);
try{
cout<< image.at<unsigned int>(1,1)<<"\n";
}
catch(Exception ex){
cout<< ex.msg;
}
cin.get();
return 0;
}
Текст исключения брошенной является
OpenCV Error: Assertion failed (dims <= 2 && data && (unsigned)i0 < (unsigned)si ze.p[0] && (unsigned)(i1*DataType<_Tp>::channels) < (unsigned)(size.p[1]*channel s()) && ((((sizeof(size_t)<<28)|0x8442211) >> ((DataType<_Tp>::depth) & ((1 << 3) - 1))*4) & 15) == elemSize1()) in unknown function, file c:\users\tim\document s\code\opencv\build\include\opencv2\core\mat.hpp, line 537
Версия OpenCV является 2.4.6, а исполняемый файл динамически связана с библиотекой отладки ,
Я не эксперт OpenCV, но, возможно, вы определяете матричные элементы, как 'беззнаковое char' но вы просите для' беззнаковое int' И что в mat.hpp, линия 537? – ThomasMcLeod
Спасибо за ответ. Изменение параметра шаблона в unsigned char заставляет программу ничего не выводить (исключение тоже) – Tim
Строка с 533 по 539 из Mat.hpp - это 'template inline _Tp & Mat :: at (int i0, int i1) { CV_DbgAssert (dims <= 2 && data && (unsigned) i0 <(unsigned) size.p [0] && (без знака) (i1 * Тип данных <_Tp> :: каналы) <(без знака) (size.p [1] * каналы ()) && CV_ELEM_SIZE1 (DataType <_Tp> :: depth) == elemSize1()); return ((_Tp *) (data + step.p [0] * i0)) [i1]; } ' –
Tim