- IplImageへの変換は、IplImageのimageDataのメンバ変数に画像のアドレスを渡す
- Bitmapへの変換は、 、IplImageのimageDataが指しているアドレスを渡す
というのが基本になります。下記は例ですが、通常のC++/MFC or Win32でのやり方とそんなに違いはないということがわかります。
Bitmap -> IplImageへの変換
private: IplImage* GetIplImage(Bitmap^ bitmap)
{
//IplImage *img = 0;
Drawing::Imaging::BitmapData^ bd;
IplImage *img = cvCreateImage(cvSize(bitmap->Width, bitmap->Height), IPL_DEPTH_8U, 3);
bd = bitmap->LockBits(
Drawing::Rectangle(0, 0, bitmap->Width, bitmap->Height),
Drawing::Imaging::ImageLockMode::ReadOnly,
Drawing::Imaging::PixelFormat::Format24bppRgb
);
memcpy(img->imageData, bd->Scan0.ToPointer(), img->imageSize);
bitmap->UnlockBits(bd);
return img;
}
IplImage -> Bitmapへの変換
private: Bitmap^ GetBitmap(IplImage* src_img){
Bitmap^ bmp = gcnew Bitmap(src_img->width, src_img->height, src_img->widthStep,
System::Drawing::Imaging::PixelFormat::Format24bppRgb, IntPtr(src_img->imageData));
return bmp;
}
0 件のコメント:
コメントを投稿