我只知道Ç語言,所以我越來越困惑/不理解openCV
數據類型的語法,特別是在cv::Mat, CvMat*, Mat.
轉換CV ::墊爲const * CvMat中CvMat中或*
我的問題是如何能我轉換cv::Mat
到const CvMat
*或CvMat*
,並且可以在任何一個在opencv2.4提供文檔鏈接,CvMat *mat
和cv::Mat
和Mat
之間的差異。
以及如何將我的int數據轉換爲CvMat中的浮點數據? 謝謝
我只知道Ç語言,所以我越來越困惑/不理解openCV
數據類型的語法,特別是在cv::Mat, CvMat*, Mat.
轉換CV ::墊爲const * CvMat中CvMat中或*
我的問題是如何能我轉換cv::Mat
到const CvMat
*或CvMat*
,並且可以在任何一個在opencv2.4提供文檔鏈接,CvMat *mat
和cv::Mat
和Mat
之間的差異。
以及如何將我的int數據轉換爲CvMat中的浮點數據? 謝謝
cv::Mat
有operator CvMat()這麼簡單分配工作:
cv::Mat mat = ....;
CvMat cvMat = mat;
中採用相同的基礎數據,所以你必須要小心的是,cv::Mat
不出去的範圍CvMat
之前。
如果需要,需要一個CvMat*
的API中使用CvMat
,然後傳遞對象的地址:
functionTakingCmMatptr(&cvMat);
至於cv::Mat
和Mat
之間的區別,它們是相同的。在OpenCV
的例子中,經常假設(並且我不認爲這是個好主意),使用using namespace cv
。
要回答特別蘇里亞的第二個問題:
泰銖,上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/difference-between-cvmat-cvmat-cvmat-and-mat/
特別是對於轉化問題(如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浮動:
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
的另一個原因。
@謝謝juanchopanza,能否提供與上述操作相關的鏈接。以及如何在CvMat中轉換我的數據類型。我的數據在我的CvMat中是整數,現在我必須將其改爲float,我該怎麼做? – surya