在图片框中以cv :: Mat格式显示网络摄像头Feed

时间:2012-09-27 07:48:43

标签: c++ winforms opencv picturebox

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

但问题是我在 C ++ Windows窗体中完成了所有这些操作,我希望它显示在PictureBox而不是在OpenCV imshow()中显示窗口。

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

我尝试将其转换为IplImage,但这也无效。 此外,我尝试了谷歌,但我无法得到一个有效的解决方案。我已经尝试了3天了。

这是我显示的代码:

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

其中framefacecv::Mat

1 个答案:

答案 0 :(得分:5)

这是一个在任何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通道图像。

尝试尝试其他图像类型的位图像素格式。