C++/CLIでOpenCV

あっさり出来ちゃいました。

C++/CLIで.NETっていじったことなかったんですけど、結構まだ泥臭いんですね。
それでも画像処理はOpenCVでやって、GUI作成は.NET Frameworkでって、かなりいいです。


即席で書いたIplImageからBitmapへの変換はこんな感じ。

Bitmap^ encodeIplToImage(IplImage *src) {
// バッファにメモリを割り当てる
Bitmap ^dst = gcnew Bitmap(src->width, src->height, Imaging::PixelFormat::Format24bppRgb);
// 直接アクセス開始
BitmapData ^data = dst->LockBits(
*(gcnew Drawing::Rectangle(0, 0, dst->Width, dst->Height)),
Imaging::ImageLockMode::ReadWrite,
PixelFormat::Format24bppRgb
);
// データのコピー
if (src->nChannels == 3) {
memcpy(data->Scan0.ToPointer(), src->imageData, src->width * src->height * src->nChannels);
}
else {
for (int i = 0; i < src->width * src->height; i++) {
byte *p = (byte *)data->Scan0.ToPointer();
*(p + i * 3) = *(p + i * 3 + 1) = *(p + i * 3 + 2) = *(src->imageData + i);
}
}
// 直接アクセス終了
dst->UnlockBits(data);
return dst;
}

でもこれだと画像が上下逆さまになっちゃう。:p

コメントを残す