- 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 件のコメント:
コメントを投稿