Для любого типа Mat, который я использую с допустимыми типами, я получаю сообщение об ошибке, как показано ниже, когда я пытаюсь выполнить какое-либо присваивание или запись в поток и т. Д. Это происходит в экспресс-компиляторе MSVC ++ 2010, это не происходит с компилятором gnu g ++.
пример некорректного использования:
Mat M = Mat::zeros( image.size(), DataType<int>::type );
std::cout << M.at<int>( 0,0 ) << std::endl; // error
// OR
int x = M.at<int>( 0,0 ); // error
две ошибки сработали вместе:
во всплывающем окне
Unhandled exception at <some hex adress> in test.exe:Microsoft C++ exception: cv:xception at memory location <some hex adress>
и в окне консоли
OpenCV Error: Assertion failed ... \mat.hpp, line 537
Какие-либо предложения?
Сделайте тип данных матрицы CV_16U
,
.at
функции доступа очень дотошны, требуют очень точных типов данных. Некоторые компиляторы игнорируют эти проблемы, в то время как другие ловят это рано.
Вместо того, чтобы ссылаться на элементы с matrix.at<int>(row, col)
, CV_16U
делает ссылку на unsigned short
тип данных. Таким образом, элементы могут быть доступны с matrix.at<unsigned short>(row, col)
,
Я не верю, что openCV имеет тип данных int.
Целочисленный тип обычно CV_16s, т.е. 16-битный, поэтому используйте