2015-11-20 111 views
0

我是opencv及其開發人員的新手。我想將無符號數據的兩個二維矩陣推回到Mat類型的對象中。並使用imshow(opencv函數)顯示該Mat請找到我試過的下面的代碼snippit。但我收到錯誤。任何幫助都得到了認可。將數據壓回矩陣並使用imshow顯示矩陣

Mat finaldata(20, 10000, CV_8UC1); 
unsigned char test[20][10000]={"0"};// test having values i checked it. 

    for (int coloumns=0 ;coloumns <20;coloumns++) 
     { 
      for (int row=0 ;row <10000;row++) 
      { 
       finaldata.push_back(test[coloumns][row]); 
      } 

     } 

     imshow("window ", finaldata); 
     waitKey(0); 

錯誤

OpenCV Error: Assertion failed (DataType<_Tp>::type == type() && cols == 1) in push_back, file /usr/local/include/opencv2/core/mat.hpp, line 690 
libc++abi.dylib: terminating with uncaught exception of type cv::Exception: /usr/local/include/opencv2/core/mat.hpp:690: error: (-215) DataType<_Tp>::type == type() && cols == 1 in function push_back 

Program ended with exit code: 9 
+0

你得到什麼錯誤? – wizurd

+0

可能不是問題,但Mat finaldata(20,10000,CV_8UC1)意味着20個ROWS和10000個列 – Micka

+0

@Micka我改變了它,但仍然得到相同的錯誤。任何想法 ? –

回答

2

據我所知,`mat.push_back將添加另一個行到你的矩陣。因此,您創建一個10000x20矩陣,並嘗試將另一個單元添加爲新行。這是行不通的,因爲你的行有20列而不是1列。

所以這會工作:

cv::Mat finaldata(0, 0, CV_8UC1); 
unsigned char test[20][10000]={"0"};// test having values i checked it. 
for (int coloumns=0 ;coloumns <20;coloumns++) 
    { 
     for (int row=0 ;row <10000;row++) 
     { 
      finaldata.push_back(test[coloumns][row]); 
     } 

    } 

但在這裏,你會得到一個200000x1矩陣告終。你可以使用cv::reshape或類似像:

finaldata = finaldata.reshape(1,10000); // if 10000 should be the number of rows. 

你可以但是不是直接使用你的數據沒有任何複製(的指針數據時):

unsigned char test[20][10000]={"0"};// test having values i checked it. 
cv::Mat finaldata(10000, 20, CV_8UC1, &test); 
+1

非常感謝你的工作。 –

2

我不知道,如果你能使用的push_back函數添加簡單的數組。我寧願使用以下方法:

cv::Mat finaldata(20, 10000, CV_8UC1); 
cv::Mat zero = cv::Mat::zeros(1, 10000, CV_8UC1); 

for (int coloumns = 0; coloumns <20; coloumns++) 
{ 
    finaldata.push_back(zero); 
} 

cv::imshow("window ", finaldata); 
cv::waitKey(0); 
+0

這將結束在一個40x10000矩陣 – Micka