2014-04-13 21 views
1

當我嘗試使交流數組傳遞給我的函數以轉換Mat數組的C數組時,我在此行上收到以下錯誤消息vector<Mat> *std_carrayTovectorm(m, 2);到一個C++向量中。我認爲我的代碼是正確的,但不確定它是否是我的std_carrayTovectorm函數是問題。如何編輯我的C數組的創建或std_carrayTovectorm函數以從C數組創建Mat的向量。將表達式列表當作複合表達式在初始化程序中創建指向Mat的向量的指針

謝謝

//表達式列表,複合式的初始化處理 //無效的轉換,從「詮釋」到「的std ::向量*」

typedef vector<Mat> vector_Mat; 

    vector_Mat* std_carrayTovectorm(Mat* a, size_t len) { 
     vector<Mat>* v = new vector<Mat>; 
     for(size_t i = 0; i < len; i++) 
      v->push_back(a[i]); 
     return v; 
    } 


    int main(int argc, char** argv) 
    { 

     Mat img1 = imread("/home/w/d1"); 
     Mat img2 = imread("/home/w/d1"); 

     Mat* m[2] = { new Mat (img1), new Mat (img2) }; 
     vector<Mat> *std_carrayTovectorm(m, 2); 

     return 0; 
    }  
+0

'M'是指向「Mat」和「std_carrayTovectorm」的指針數組需要一個「Mat」數組。 – francis

回答

1

有關於指針的一些問題...並且你在main中粘貼了一個函數的原型,並忘記刪除返回類型!

這是一個修改後的程序,讓您回到正確的軌道上。注意,我改性vector_Mat到指針到Mat矢量...

#include<iostream> 
#include<cmath> 

#include<opencv2/imgproc/imgproc.hpp> 
#include<opencv2/highgui/highgui.hpp> 
#include <opencv2/core/core.hpp> 
using namespace std; 
using namespace cv; 

typedef vector<Mat*> vector_Mat; 

vector_Mat* std_carrayTovectorm(Mat** a, size_t len) { 
    vector_Mat* v = new vector_Mat(); 
    for(size_t i = 0; i < len; i++) 
     v->push_back(a[i]); 
    return v; 
} 


int main(int argc, char** argv) 
{ 

    Mat img1 = imread("one.jpg"); 
    Mat img2 = imread("two.jpg"); 

    Mat* m[2] = { &img1, &img2 }; 
    vector_Mat* v=std_carrayTovectorm(m, 2); 

    imwrite("three.jpg",*((*v)[0])); 
    imwrite("four.jpg",*((*v)[1])); 
      delete v; 
    return 0; 
}  

再見,

編輯:在不修改vector_Mat

#include<iostream> 
#include<cmath> 

#include<opencv2/imgproc/imgproc.hpp> 
#include<opencv2/highgui/highgui.hpp> 
#include <opencv2/core/core.hpp> 
using namespace std; 
using namespace cv; 

typedef vector<Mat> vector_Mat; 

vector_Mat* std_carrayTovectorm(Mat** a, size_t len) { 
    vector_Mat* v = new vector_Mat(); 
    for(size_t i = 0; i < len; i++) 
     v->push_back(*a[i]); 
    return v; 
} 


int main(int argc, char** argv) 
{ 

    Mat img1 = imread("one.jpg"); 
    Mat img2 = imread("two.jpg"); 

    Mat* m[2] = { &img1, &img2 }; 
    vector_Mat* v=std_carrayTovectorm(m, 2); 

    imwrite("three.jpg",((*v)[0])); 
    imwrite("four.jpg",((*v)[1])); 

    delete v; 
    return 0; 
} 

再見,

+0

....謝謝你在這方面的幫助......它完美的工作......但我的同事不希望我改變vector_Mat * ...你有其他建議嗎? – user3517736

+0

@ user3517736:你的夥伴是對的,很容易做到這一點,而不需要修改vector_Mat。我相應地編輯了我的答案。 – francis

相關問題