0

これら 2 つの関数の同じ操作を実行できる c++ opencv インターフェイスはありますか?

こんにちは、私は実際にこれら2つの機能をこのように使用しています

IplImage *image;
ARUint8 *dataPtr; // unsigned chars, in format ARGB
cv::Size size;

//do stuff

image = cvCreateImage(*size, IPL_DEPTH_8U, channels );

cvSetImageData( image, dataPtr, size->width * channels );

1 つ目の作成は空の IplImage *image を初期化するために使用され、2 つ目は外部ソース (dataPtr) から生データをイメージ自体にコピーするために使用されます。

最初のものは、IplImage con un cv::Mat を置き換える簡単なものであることはわかっています。問題は、パラメーター「IPL_DEPTH_8U」をコンストラクターに渡す方法がわからないことです。

C ++インターフェイスでデータをコピーするには、手がかりがありません...

PS: ARUint8 *dataPtr は私のデータ ソースです。別のソースを持つことはできませんが、それを opencv データ表現に変換する必要があります。

前もって感謝します!

4

1 に答える 1

1

ご想像のとおり、C++ インターフェイスでは、コンストラクター for を介してこれを行いますcv::Mat。に対応する適切なタイプを使用する必要がありますIPL_DEPTH_8U(おそらくCV_8U、またはCV_8UC3チャンネルの数に応じて)。

コンストラクターのオーバーロードの 1 つは、既存のデータへの生のポインターを取ることができるため、次のようにすることができます。

cv::Mat image(size, CV_8U, (void*)dataPtr);

cv::Mat コンストラクターは引数を取ることができることにも注意してくださいstep。これは、データの行の最後にパディングがある場合、またはその他のより複雑な形式の場合に必要です。

詳細については、オンラインで Mat::Matの OpenCV ドキュメントを参照することもできます。

于 2013-02-11T14:09:22.053 に答える