7

我正在使用 OpenCV 从网络摄像头获取实时流并在检测到人脸之后。我正在调整它们的大小,以便只显示我的脸。

但问题是我在C++ Windows 窗体中执行所有这些操作,我希望它显示在 aPictureBox而不是在 OpenCVimshow()窗口中显示。

我正在使用cv::Mat,所以在图片框中显示时遇到了很多问题。

我已经尝试将其转换为IplImage,但这也不起作用。另外,我尝试过谷歌,但我找不到有效的解决方案。我已经尝试了 3 天。

这是我的显示代码:

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

在哪里frameface在哪里cv::Mat

4

1 回答 1

6

这是一个 C++ CLR 函数,用于在任何 Windows 窗体控件上绘制 OpenCV 垫子:

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 回答