2012-08-26 87 views
2

我正在努力將大整數,例如2942584,放在cv墊子裏。接受它的唯一類型是CV_8UC1,但它將值從2942584更改爲120(很明顯,在8位中)。cv ::大整數的墊子

但是,無論如何有一個cv馬特的原始價值?

下面是簡單的代碼,如果有幫助:

Mat matrix(6,10,CV_8UC1); 
matrix.at<char>(0,0) = 2942584; 
cout << (int)matrix.at<char>(0,0); 

輸出:

120 

回答

6

當你定義爲CV_8UC1可以定義每個元素必須是8位矩陣。這意味着您只能存儲0到255之間的值。如果要使用大數字,則應將CV_32UC1定義爲unsigned integersCV_32SC1signed integers。此外,您應該將值存儲爲int而不是char並以適當的方式讀取它。

更正確的代碼是

Mat matrix(6,10,CV_32SC1); 
matrix.at<int>(0,0) = 2942584; 
cout << (int)matrix.at<int>(0,0); 

一件事:矩陣元素的格式如下

CV_<NUMBER_OF_BITS><SIGNED/UNSIGNED>C<NUMBER_OF_CHANNELS> 
+0

好吧,我曾試圖CV_32SC1但確實焦炭是問題。非常感謝你 – George

+0

@George如果你在內存中使用不正確的類型來分配矩陣,你將來會遇到內存泄漏問題,那將很難調試。 – Alex

+0

好的,我會確保將來會留意這一點。這些細節非常明顯,不幸的是文檔中沒有太多的文字,我自己也沒有弄明白。再次感謝您的幫助! – George