У меня есть массив ints (изображение размеров numangle * numrho на самом деле, в переменной называется accum), которую я хотел бы преобразовать в структуру opencv Mat для отображения, и у меня небольшая проблема. Я создаю OutputArray и заполняю его данными значениями из целочисленного массива; поскольку данные OutputArray является uchars, по-видимому (хотя я объявил CV_32SC1, который для 32-битных знакового целого 1 канал изображений) Я заполнить его в байтах за байтом следующим образом:Преобразование целочисленного массива OpenCv
int s = sizeof(accum[0]);
_acc.create(numangle+2,numrho+2,CV_32SC1);
Mat accumulator = _acc.getMat();
for(int r = 0; r < numrho; r++)
for(int n = 0; n < numangle; n++)
{
int base = r * (numangle)+n;
accumulator.data[base*s+3] = accum[base] & 0xFF;
accumulator.data[base*s+2] = (accum[base]>>8) & 0xFF;
accumulator.data[base*s+1] = (accum[base]>>16) & 0xFF;
accumulator.data[base*s+0] = (accum[base]>>24) & 0xFF;
// accumulator.at(int)(r,n)=accum[base];
}
Однако я, кажется, ветер с 1- хотя и имеет правильные размеры. Я немного ржавый на моей арифметике указателя, может быть, мне не нужна база. Кроме того, если я должен был использовать accumulator.at (x, y), это было бы значительно медленнее?
спасибо, что выглядит как хороший способ. Я пробовал это время cpl, но до сих пор сталкивался с ошибками памяти (код выхода 139, когда я вызываю это из python, где я обычно работаю в эти дни); это не может быть связано с получением ширины вместо высоты I blv. Ошибка занимает короткое замыкание в n, r = 32202 массива 180,3000. Исходная память выделяется через 'memset (accum, 0, sizeof (accum [0]) * (numangle + 2) * (numrho + 2));' –
memset не выделяет память. – Photon
ОК, вы правы. 'AutoBuffer _accum ((numangle + 2) * (numrho + 2)); int * accum = _accum; 'это распределение, которое не помогает мне понять, почему код по-прежнему падает. Я не знаком с reinterpret_cast, поэтому теперь я пытаюсь «accumulator.at (int) (r, n) = accum [base]», здесь идет еще 30-минутный цикл компиляции и тестирования. –