2013-05-21 3 views
2

Я инициализирует объект Mat с массивом, как этотинициализации OpenCV Mat из массива не работает

int data[4] = {111,2,3,4}; 
Mat A = Mat(2, 2, CV_8UC1, data); 

Теперь, когда я печатая значение в (1,1), которое должно быть 4

cout<<"\n m1 at 1,1 "<<(int)A.at<uchar>(1,1); 

это печать 0

Я использую VS2008 в Windows XP и OpenCv 2.3. Я застрял на нем со вчерашнего дня.

+1

Пробовали ли вы создавать данные в виде 'беззнаковых данных полукокса [4]'? – sgarizvi

+0

Я не думаю, что значение как 1,1 должно быть 4. Это должно быть что-то 8 * 3 бит с самого начала. Ваша матрица содержит 8 бит элементов. – juanchopanza

+0

Спасибо. Теперь работает. Не могли бы вы объяснить, в чем проблема? – t0mkaka

ответ

8

В вашей матрице содержатся 8-битные элементы (это то, что означает CV_8UC1). Вы передаете ему массив ints. Предполагая, что 32-битные ints, первый, 111, должен быть достаточным для заполнения массива. Наиболее значимые 8 бит 111 войдут в позицию 1,1, и это 0 s. Таким образом, вы получаете элемент со значением 0.

попробуйте передать 8 бит без знака элементы:

unsigned char data[4] = {111,2,3,4}; 
Mat A = Mat(2, 2, CV_8UC1, data); 

В качестве альтернативы, если вам нужно хранить подписанный 32 битовых элементов, используйте CV_32S.

+0

Хорошо объяснил. большое спасибо – t0mkaka

2

Попробуйте

unsigned char data[4] = {111,2,3,4}; 
Mat A = Mat(2, 2, CV_8UC1, data); 

или

int data[4] = {111,2,3,4}; 
Mat A = Mat(2, 2, CV_32SC1, data); 
Смежные вопросы