2015-01-19 3 views
0

Я хочу построить матрицу openCV. Ниже приведен мой код.Как хранить и читать целую матрицу по OpenCV?

int data[9]={0,1,0,0,-1,0,0,0,0}; 
cv::Mat m(3, 3, CV_8SC1,data); 
cout<<(int)m.at<char>(0,1)<<endl; 
cout<<(int)m.at<schar>(0,1)<<endl; 

На мониторе нет результатов. Но, если я изменю свой код на следующее.

float data[9]={0,1,0,0,-1,0,0,0,0}; 
cv::Mat m(3, 3, CV_32FC1,data); 
cout<<m.at<float>(0,1)<<endl; 

Будет показан «1». Однако, если я использую тип «float» вместо «int», мне нужно потратить избыточную память для хранения чисел «1», «0» или «-1». Есть ли кто знает, как сохранить целое число с помощью openCV? Спасибо.


После поиска на другом сайте, я нашел решение следующим образом.

cv::Mat C = (cv::Mat_<int>(3,3) << 0, 1, 0, 0, -1, 0, 0, 0, 0); 
cout << "C = " << endl << " " << C.at<int>(0,1)<<endl; 
+0

Это выглядит, как она должна работать. Вы получаете какую-либо ошибку? – beaker

+0

Почему вы вообще хотите использовать int? Это может потребовать гораздо больше памяти, чем char, вы можете проверить его с помощью cout << sizeof (char) << "vs" << sizeof (int) << "vs" << sizeof (float) << std :: endl; – Micka

+0

Поскольку число может быть больше 256 – Kuo

ответ

2

Ваша проблема, кажется, ваш тип данных ввода данных. Для вашего массива используется тип int (вероятно, 32 бит), но для вашей матрицы используется тип char (8 бит).

пожалуйста, попробуйте:

char data[9]={0,1,0,0,-1,0,0,0,0}; 
cv::Mat m(3, 3, CV_8SC1,data); 
cout<<(int)m.at<char>(0,1)<<endl; 
cout<<(int)m.at<schar>(0,1)<<endl; 

Если вы хотите или должны использовать целочисленный массив, попробуйте

int data[9]={0,1,0,0,-1,0,0,0,0}; 
cv::Mat m(3, 3, CV_32SC1,data); 
cout<<(int)m.at<int>(0,1)<<endl; 
+0

Большое спасибо за ваш ответ. Я могу выполнить первый ответ хорошо. Но у меня есть ошибка времени выполнения, когда я использую второй случай. Кроме того, я нашел другое решение на другом сайте, и я обновляю свой вопрос. – Kuo

+0

Проблема 2-й версии была доступ в cout, теперь она должна работать (не тестировалась) – Micka

+0

Oh! Я знаю, что Вы имеете ввиду. – Kuo

Смежные вопросы