0

OpenCVからiplimageのセットを、iplimageを使用せず、代わりにc ++ /cliを介してbyte[]のリストを使用する別のプログラム(.net)に渡そうとしています。iplimageをbyte[]のリストに追加/変換する方法はありますか?

ありがとう。

4

4 に答える 4

0

他のことをする前に、時間をかけて、がどのように作成され、どのような情報が格納されているかIplImageを学習してください。

次に、画像のピクセルにメンバーを介してアクセスできることに注意してくださいimageData。これはunsigned char*:です。

IplImage* image = cvLoadImage("starwars.jpg", 0);
int img_sz = image->width * image->height * image->nChannels;
unsigned char* data = (unsigned char*) malloc(img_sz);
memcopy(data, image->imageData, img_sz);

に変換するには、同様の手順を実行する必要がありますbyte[]。ちなみに、この投稿] 2は、(とりわけ)をに変換する方法を示しIplImage*ていSDL_Surface*ます。

于 2012-07-09T20:18:58.743 に答える
0

iplimage.imageData から正確なピクセルをコピーする場合は、Marshal.CopyIntPtrを使用して(imageData) からマネージド配列 (byte[]) に データをコピーできます。

しかし、imageData は圧縮されていないため、使用するimencodecvEncodeImage、中間バッファーに圧縮してから、byte[]上記のコードでそれを にコピーすることをお勧めします。

于 2012-07-09T18:59:57.367 に答える
0

まず、可能であれば OpenCV の C++ API に切り替えることをお勧めします。これは、古い C インターフェイスと比較して、より多くの柔軟性と機能を提供します。

C++ インターフェイスでは、上記のタスクを実行するためのスニペットは次のようになります。

cv::Mat image = cv::imread(imname);
uchar *ptr = (uchar*)image.data

ptr (8 ビットの符号なしバイト データ) はどこでも使用できます。このデータを変更すると、実際の画像が変更されることに注意してください。これが発生したくない場合は、memcpy を使用してデータのコピーを取得します。

于 2012-07-10T12:43:09.790 に答える