簡體   English   中英

將cv :: Mat轉換為const CvMat *或CvMat *

[英]convert cv::Mat to const CvMat* or CvMat*

我只知道C語言,所以我感到困惑/不理解openCV數據類型的語法,特別是在cv::Mat, CvMat*, Mat.

我的問題是如何將cv::Mat轉換為const CvMat *或CvMat* ,並且任何人都可以在opencv2.4中提供CvMat *matcv::MatMat之間差異的文檔鏈接。

如何將我的int數據轉換為CvMat中的浮點數據? 謝謝

cv::Mat有一個運算符CvMat(),所以簡單的賦值工作:

cv::Mat mat = ....;
CvMat cvMat = mat;

這使用相同的底層數據,因此您必須注意cv::MatCvMat之前不會超出范圍。

如果您需要使用CvMat ,需要一個一個API中CvMat* ,然后傳遞對象的地址:

functionTakingCmMatptr(&cvMat);

至於cv::MatMat之間的區別,它們是相同的。 OpenCV示例中,通常假定using namespace cv (並且我認為這不是一個好主意)。

特別回答surya的第二個問題:

THB,關於OpenCV的文檔不是最好的。 這里是最新類型的鏈接:cv :: Mat http://docs.opencv.org/2.4/modules/core/doc/basic_structures.html#mat較新的類型比c風格更現代的c ++。

這里還有兩個OpenCV論壇答案,其中有類似的主題: http//answers.opencv.org/question/65224/conversion-between-cvmat-and-cvmat/http://www.answers.opencv.org/question/ 13437 /差之間-與CvMat-與CvMat-CvMat中和墊/

特別是對於轉換問題(如提到的juanchopanza):

cv::Mat mat = cv::Mat(10, 10, CV_32FC1); //CV_32FC1 equals float 
                                         //(reads 32bit floating-point 1 channel)
CvMat cvMat = mat;

或者

using namespace cv; //this should be in the beginning where you include
Mat mat = Mat(10, 10, CV_32FC1); 
CvMat cvMat = mat;

注意:通常你可能會使用CvMat* - 但你應該考慮完全切換到更新的類型。 示例(取自我的第二個鏈接):

CvMat* A = cvCreateMat(10, 10, CV_32F); //guess this works fine with no channels too

將int更改為float:

CvMat* A = cvCreateMat(10, 10, CV_16SC1);
//Feed A with data
CvMat* B = cvCreateMat(10, 10, CV_32FC1);
for( int i=0; i<10; ++i) 
    for( int i=0; i<10; ++i) 
        CV_MAT_ELEM(*A, float, i, j) = (float) cvmGet(B, i, j);
//Don't forget this unless you want to produce a memory leak. 
cvReleaseMat(&A);
cvReleaseMat(&B);

前兩個例子(沒有指針)很好,因為CvMat然后保存在堆上。 cvCreateMat(...)分配你必須在以后自由釋放的內存。 使用cv::Mat另一個原因。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM