我正在使用OpenCV从网络摄像头拍摄实时信息流并在检测到人脸后。我正在调整它们的大小,以便只显示我的脸。
但问题是我在 C ++ Windows窗体中完成了所有这些操作,我希望它显示在PictureBox
而不是在OpenCV imshow()
中显示窗口。
我正在使用cv::Mat
所以我在图片框中显示时遇到了很多问题。
我尝试将其转换为IplImage
,但这也无效。
此外,我尝试了谷歌,但我无法得到一个有效的解决方案。我已经尝试了3天了。
这是我显示的代码:
face = getFace(frame);
cv::imshow("window",face);
其中frame
和face
为cv::Mat
答案 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通道图像。
尝试尝试其他图像类型的位图像素格式。