2011-12-13 74 views
0

有什麼方法可以將CvMat *轉換成CvMat?我被困在代碼中,我必須使用cvCloneMat()克隆CvMat。這給了我CvMat *,因爲我需要它作爲CvMat。將CvMat 8轉換成CvMat

我已經嘗試瞭解引用的東西,但它不工作。我正在寫一個抖動/最大外部,它有一個圖像矩陣作爲輸入,矩陣作爲輸出。這裏是一段代碼

//Convert input and output matrices to OpenCV matrices 
    cvJitter2CvMat(in_matrix, &source); 
    cvJitter2CvMat(out_matrix, &edges); 

    //Calculate threshold values 
    thresh1 = x->threshold - x->range; 
    thresh2 = x->threshold + x->range; 
    CLIP(thresh1,0,255); 
    CLIP(thresh2,0,255); 



    //calculate 
    //cvCanny(&source, &edges, thresh1, thresh2, 3); 
    tempo = cvCloneMat(&source); 
    edges = (*tempo); 
} else { 
    return JIT_ERR_INVALID_PTR; 
} 

出: jit_object_method(out_matrix,gensym( 「鎖」),out_savelock); jit_object_method(in_matrix,gensym(「lock」),in_savelock); return err; }

問題是,當我使用「cvCanny()」而不是cvCloneMat()它的作品。輸出顯示爲視頻流的邊緣。但如果我使用cvCloneMat(),它會顯示一個空白圖像。

回答

2

這是任何指針相關的東西真:

CvMat* pMat = cvCloneMat(...); 
CvMat mat = (*pMat); 
functionThatNeedsMat(*pMat); 
otherFunctionThatNeedsMat(mat); 

檢查也是本文約pointer dereferencing

+0

親切看看編輯的問題,因爲它不工作。 – Waqar

+0

邊緣被聲明爲CvMat,而不是CvMat *。將節奏標題複製到邊緣(但不是圖像數據)。這是錯誤的。因爲在溫度超出範圍之後,沒有人知道發生了什麼。我已經看到更多的CvMat inits並且沒有發佈。仔細閱讀OpenCV文檔並尋找關於指針和內存使用情況的好教程。接受我的忠告,開始學習C/C++,然後去OpenCV。沒有基礎知識,你就不能繼續。 – Sam

+0

當你想回到圖像處理時,我的建議是使用C++接口。用Mat,而不是CvMat。 – Sam