2012-06-14 16 views
9

私だけC言語を知っているので、私は混乱が/私の質問はどのようにすることができ、特にcv::Mat, CvMat*, Mat.コンバートCV ::マットれるCvMat *やCvMatのをCONSTする*

openCVデータ型の構文を理解していない取得しています私はcv::Matconst CvMat *またはCvMat*に変換し、CvMat *matcv::MatおよびMatの間のドキュメントリンクをopencv2.4に提供することができます。

と私のintデータをCvMatのデータをフロートに変換する方法はありますか?

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

あなたはcv::MatCvMat前に、スコープの外に出ていないことに注意する必要がありますので、これは、同じ基本データを使用しています: は

答えて

22

cv::Matoperator CvMat()ので、単純な割り当てが機能しているありがとうございます。

あなたがCvMat*を取るAPIでCvMatを使用する必要がある場合は、そのオブジェクトのアドレスを渡す:cv::MatMatの違いについては

functionTakingCmMatptr(&cvMat); 

を、彼らは同じです。 OpenCVの例では、using namespace cvが使用されていることが多いと思われます(これは良い考えではありません)。

+0

@ juanchopanzaありがとう、上記の操作に関連するリンクを提供できますか? CvMatでデータ型をどのように変換できますか?私は私のCvMatのデータを整数にしました、今私は浮動小数点に変更する必要があります、どうすればいいですか? – surya

0

特にスーリヤの2つ目の質問に答えるために:

THBを、OpenCVの上のドキュメントが最善ではありません。 ここに最新のタイプへのリンクがあります:cv :: Mat http://docs.opencv.org/2.4/modules/core/doc/basic_structures.html#mat新しいタイプは、CスタイルよりもモダンなC++です。ここ

類似のトピックを有する2件の以上のOpenCVのフォーラム回答:http://answers.opencv.org/question/65224/conversion-between-cvmat-and-cvmat/ 及び(juanchopanzaに述べたように)特に変換問題のhttp://www.answers.opencv.org/question/13437/difference-between-cvmat-cvmat-cvmat-and-mat/

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*で作業しますが、新しいタイプに完全に切り替えることについて例(私の第2のリンクから採取):

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

フロートするINTの変更:れるCvMatはヒープ上に保持されているよう

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); 

(ポインタなし)最初の2つの例は、そのような細かいです。 cvCreateMat(...)は、自分で解放しなければならないメモリを後で割り当てます。 cv::Matを使用する別の理由

関連する問題