OpenCVのキャプチャ画像をwxWidgetsのイメージ形式に変換してみた

OpenCVのCvCaptureで取得したIplImage構造体のデータをwxImageに変換する方法を調べたけどあんまり見つからなかったから作ってみた。

capture
とりあえず実行結果。ウインドウタイトルについては気にしないでください。
[cpp]
/**
* OpenCV画像からwxImage形式に変換
* @param[in] base 元画像
* @return 変換後のwxImage
*/
wxImage *CvWxImageConvert(IplImage *base){
wxImage *img = new wxImage();
img->Create(base->width, base->height);
unsigned char *pixels = img->GetData();
//コピー
for(int x = 0; x < base->width; x++){
for(int y = 0; y < base->height; y++){
int index = x * 3 + base->width * y * 3;
pixels[index + 0] = base->imageData[index + 2];
pixels[index + 1] = base->imageData[index + 1];
pixels[index + 2] = base->imageData[index + 0];
}
}
return img;
}
[/cpp]
変換コード。OpenCVとwxWidgetsでRGBの順番が違うのか、そのままコピーすると色がおかしくなるのでRGBを反転してコピー。
これを
[cpp]
IplImage *frame = cvQueryFrame(camera);
wxImage *image = CvWxImageConvert(frame);
this->capture->SetBitmap(wxBitmap(*image));
delete image;
[/cpp]
としてあげると、実行例のように画面のwxStaticBitmapコントロールに描写される。
ただ、これ書いてから気づいたけど、画面がすっごいちらつくので何とかしないといけないと思う…

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です