2011-11-04 21 views
0

所以,我正在寫一些OpenCV C++代碼,我無法將我的代碼從OpenCV 2.2移植到2.3.1。目前的主要問題是Mat::copyTo函數。在文檔或發行說明中,他們提到雖然此函數的新版本採用OutputArray,但舊代碼仍應可用(即,Mat::copyTo(Mat &m))。事情是它不起作用。opencv 2.3 copyTo函數不工作,因爲它在2.2

這裏是我的代碼

void copyMatRows(Mat &src,Mat &dest,int start_pos) 
{ 
    for(int i=0; i < src.rows;i++) 
    { 
     int dest_y = start_pos; 

     if(start_pos < 1) 
     { 
      dest_y = dest_y+i; 
     } 
     src.row(i).copyTo(dest.row(dest_y)); 

    } 
} 

所以在上面的代碼行

src.row(i).copyTo(dest.row(dest_y)); 

失敗,出現錯誤

呼叫到CV不匹配功能::墊:: copyTo(cv :: Mat)候選 爲:void cv :: Mat :: copyTo(const cv :: _ OutputArray &)const

任何幫助將不勝感激?任何我可以解決這個問題的方法?

我想要做的是獲得N個矩陣並將它們全部組合在一個大矩陣中。

+0

在OpenCV中有更高效的方法來複制矩陣。看看使用投資回報率。 – misha

+0

那麼這將是有道理的,但如何?函數adjustROI和locateROI與cvSetImageROI的工作方式稍有不同....我相信ROI涉及在進行操作之前增長圖像矩陣 – cptdanko

+0

它們的工作方式稍有不同,但最終完成的結果完全相同。相當於cvSetImageROI是接受Rect的Mat構造函數。看看這裏:http://opencv.willowgarage.com/documentation/cpp/basic_structures.html – misha

回答

1

這應該可以解決你的函數,但我不知道它在做什麼你想要什麼:

void copyMatRows(Mat &src, Mat &dest, int start_pos) 
{ 
    for(int i = 0; i < src.rows; i++) 
    { 
     int dest_y = start_pos; 

     if(start_pos < 1) 
     { 
      dest_y = dest_y + i; 
     } 

     Mat destRow = dest.row(dest_y); 
     src.row(i).copyTo(destRow); 
    } 
} 

編輯: 這應該做幾乎你在找什麼:

void appendMatRows(Mat &src, Mat &dst, int start_pos) 
{ 
    for(int i = start_pos; i < src.rows; i++) 
    { 
     dst.push_back(src.row(i)); 
    } 
} 

push_back成員函數的主要注意事項是列數必須相同,但我不認爲你太擔心這一點。

希望有幫助!

+0

是的,這上面的方法工作正常,但我想追加矩陣行 – cptdanko

相關問題