在图片框中显示cv::Mat格式的网络摄像头提要

Displaying webcam feed in cv::Mat format in a picturebox

本文关键字:格式 网络 摄像头 Mat 显示 cv      更新时间:2023-10-16

我正在使用OpenCV从网络摄像头和检测人脸后进行直播。我正在调整它们的大小,以便只显示我的脸。

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

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

我试过把它转换成IplImage,但也没用。此外,我尝试过谷歌,但找不到一个有效的解决方案。我已经试了三天了。

这是我的显示代码:

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

其中framefacecv::Mat

这里有一个C++CLR函数,可以在任何Windows窗体控件上绘制OpenCV mat:

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通道图像。

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