2016-09-27 21 views
1

これは愚かな質問ですが、私はC++でポインタを使った経験が豊富です。opencv :: MatをMat *にコピーする*

私はOpenCVのを使用しています

、およびcv::Matのように初期化している。一つは、ポインタがある明らかに

cv::Mat frameRaw; 

、および:データで満たさ

cv::Mat* frame; 

私はまた別のマットを持っているが、のように初期化他はありません。

frameRawからframeにデータをコピーする必要があります。

私は*frame = frameRaw;を試しましたが、例外エラーが発生します。

どうすればよいですか?

ありがとうございました。

+2

あなたがそれを使用する前に、あなたの 'frame'を初期化しますか? –

+0

実際、それはコメントアウトされました!今すぐ働き、ポストを更新します。ありがとうございました! – anti

+2

この最初の構文は必要ありません。単に2番目の構文に置き換えることはできますか?現代のC++では、 'new'の使用は避けられます。 Opencvはそのイディオムに従っています。 – kebs

答えて

1

私の間違いを指摘していただきありがとうございます。私はMatを適切に初期化していませんでした。

frame = new cv::Mat();

を追加すると、問題が修正されます。

+0

内部参照カウンタを壊す可能性が高いので、 'Mat'へのポインタを使わないでください。 'Mat'オブジェクトは基本的にデータへのポインタです_ – Miki

0

コードスニペットを参照してくださいが、これはあなたに答えることを願っています:

Mat * f = new Mat(2,2,CV_32FC1); 
    f->at<float>(0,0) = 1; 
    f->at<float>(0,1) = 2; 
    f->at<float>(1,0) = 3; 
    f->at<float>(1,1) = 4; 

    Mat ff; 
    f->copyTo(ff); 
    cout<<ff; 
関連する問題