У меня есть 3D-вектор и несколько изображений. Я пытаюсь сохранить пиксельные данные изображений в этот вектор. Первый параметр содержит порядковый номер изображения в наборе, а следующие два параметра должны содержать данные о пикселях в точке (x, y). Учитывая, что я написал следующий код: -
Mat out;// out has an image in it
vector <vector< vector< int> >> Input_bin;
Input_bin.push_back(vector<vector<int>>(inst_num));// the order number
for (int i = 0; i <= out.cols; i++)
{
for (int j = 0; j <= out.rows; j++)
{
Input_bin[inst_num].push_back(vector<int>(out.at<int>(i,0)));
Input_bin[inst_num][out.at<int>(i,0)].push_back(out.at<int>(0,j));
}
}
Но я получаю сообщение об ошибке:
Ошибка OpenCV: утверждение не выполнено (затемнение ‹= 2 && data && (без знака) i0 ‹ (без знака) size.p[0] && (без знака) (i1 * DataType‹_Tp>::channels) ‹ (без знака) (size. p[1] * channels()) && ((((sizeof(size_t)‹‹28)|0x8442211) >> ((DataType‹_Tp>::depth) & ((1 ‹‹ 3) - 1)) *4) & 15) == elemSize1()) в cv::Mat::at, файл C:\opencv_3\opencv\bui ld\include\opencv2/core/mat.inl.hpp, строка 894
и я даже не могу попытаться распечатать результат вектора на экране cmd. Какие-либо предложения?
Изменить 2. Я попробовал другой код, сделав вектор input_bin двумерным и типом данных с плавающей запятой.
for (int i = 0; i <= out.cols; i++)
{
for (int j = 0; j <= out.rows; j++)
{
Input_bin[inst_num][out.at<float>(i, j)];
}}
все та же ошибка
CV_32SC1
, потому что вы используетеint
), вы пытаетесь получить доступ к мату в неправильном порядке:out.at<int>(i,0)
означает ROW i, COLUMN 0, но ваша переменнаяi
зацикливается на столбце, аj
зацикливается на строке. - person Micka   schedule 05.04.2016out
). Какой типout
?CV_8UC3
,CV_32SC1
,CV_32FC1
или как? - person Miki   schedule 05.04.2016.at<int>()
, потому чтоint
является 32-битным со знаком, а не 8-битным без знака. Это приведет к ошибкам доступа (ошибкам сегментации) где-то в изображении, и вы читаете мусорные значения в позициях, где ошибка еще не возникает. - person Micka   schedule 05.04.2016