7

OpenCV を使用して、ウェブカメラから顔を検出した後にライブ ストリームを取得しています。自分の顔だけが表示されるようにリサイズしています。

しかし問題は、これをすべてC++ Windows FormsPictureBoxで行っており、OpenCVimshow()ウィンドウで表示するのではなく、表示したいことです。

使ってcv::Matいるので、ピクチャーボックスに表示するのにかなりの問題があります。

私はそれをに変換しようとしましIplImageたが、それもうまくいきませんでした。また、Google を試してみましたが、実用的な解決策を得ることができませんでした。私はこれを3日間試しています。

表示するための私のコードは次のとおりです。

                 face = getFace(frame);
                 cv::imshow("window",face);

どこframefaceいるcv::Mat

4

1 に答える 1

6

以下は、任意の Windows フォーム コントロールに OpenCV マットを描画する C++ CLR 関数です。

void DrawCVImage(System::Windows::Forms::Control^ control, cv::Mat& colorImage)
{
    System::Drawing::Graphics^ graphics = control->CreateGraphics();
    System::IntPtr ptr(colorImage.ptr());
    System::Drawing::Bitmap^ b  = gcnew System::Drawing::Bitmap(colorImage.cols,colorImage.rows,colorImage.step,System::Drawing::Imaging::PixelFormat::Format24bppRgb,ptr);
    System::Drawing::RectangleF rect(0,0,control->Width,control->Height);
    graphics->DrawImage(b,rect);
    delete graphics;
}

この関数は、8 ビット 3 チャネルの画像のみを描画できます。

他の画像タイプのビットマップのピクセル形式を試してみてください。

于 2012-09-27T19:39:07.773 に答える