0

OpenCV Mat オブジェクトのアドレスを取得しています。オブジェクトを初期化した後、次のメソッドを呼び出したい

 Mat::Mat(const Mat& m, const Range* ranges)

OpenCV メソッド リンク

しかし、コンパイルエラーが発生します。私は長い間C ++をやっていません。誰でも助けることができますか?

コード

void HelloWorld::callBack(jlong addrRgba, float dt) {

long lrgba = (long) mRgba;
Mat bgraMat = *(Mat*) lrgba;

Mat rgbMat = new Mat(&bgraMat, Range::all());   //cant get this to work
}

エラー メッセージ

error: no matching function for call to 'cv::Mat::Mat(cv::Mat*, cv::Range)'
4

1 に答える 1

0

これを試していただけますか?

Range rAll = Range::all() ;   
Mat *rgbMat = new Mat(bgraMat, &rAll); 

編集:PK。問題が解決してよかったです。私がこれを提案した理由を理解するのを助けるために:

コンストラクタを使用したい:

 Mat::Mat(const Mat& m, const Range* ranges)

Mat変数への参照を取ります。Mat変数を 1 つ渡すだけです。Rangeそして、変数へのポインターを取ります。Range1 つの変数のアドレスを渡すことができます。と の 2つをRange保存するだけです。コピー可能です。の 1 つの特別な「静的」値は、何を返し、何をコピーして渡すことができるかです。この作業が正しく、コンパイルだけではないことを確認する必要があります。intstartendRangeall()rAll

編集2:あなたがしていることの意味を理解しようとして、私は簡単に提案します:

Mat *rgbMat = new Mat(bgraMat); 

また

Mat rgbMat = Mat(bgraMat); 

次と同じになると思います:

Range rAll[2];
rAll[0]= Range::all() ;
rAll[1]= Range::all() ;
Mat *rgbMat = new Mat(bgraMat, rAll); 

@Peter Woodがピントしたように。また、私は次のことについて好奇心が強いです:

long lrgba = (long) mRgba;
Mat bgraMat = *(Mat*) lrgba;

mRgba がクローンしたい Mat へのポインターである場合、なぜでしょうか?:

Mat *rgbMat = new Mat(*mRgba); 
于 2013-03-11T10:18:46.657 に答える