在Windows窗体图片框中显示EmguCV图像

时间:2015-05-04 12:49:17

标签: c# emgucv

Image<Bgr, Byte> ImageFrame = capture.QueryFrame();  //line 1
CamImageBox.Image = ImageFrame.ToBitmap();

我在Windows窗体图片框中使用了DisplayEmguCV图片的上述代码,

但我有一个错误:

  

无法将类型'system.drawing.bitmap'隐式转换为   'emgu.cv.image'

此案例也出现在Stackoverflow问题中,但没有人给出正确答案。

1 个答案:

答案 0 :(得分:1)

您似乎混淆了PictureBox(由System.Windows.Forms中的.NET框架提供)和ImageBox(这是Emgu.CV.UI中的EmguCV类)。由于这两个元素非常相似,因此很容易将它们混合起来。

  

ImageBox是一个类似于PictureBox的用户控件。代替   显示位图,它显示任何图像&lt;,&gt;宾语。它还提供   用于简单图像处理的额外功能。

在您的代码示例中,您的CamImageBox&#39;元素是ImageBox。将Bitmap添加到ImageBox确实会导致以下错误:

  

无法隐式转换类型&#39; System.Drawing.Bitmap&#39;至   &#39; Emgu.CV.IImage&#39;

ImageBox的优点在于它为您提供了专注于EmguCV的其他功能。其中一项功能是您可以直接显示EmguCV Image<,>Mat个对象,从而为您节省ToBitmap()转换。如果您想继续使用ImageBox元素,则可以使用以下两个选项之一:

Mat matImage = capture.QueryFrame();
CamImageBox.Image = matImage; // Directly show Mat object in *ImageBox*
Image<Bgr, byte> iplImage = matImage.ToImage<Bgr, byte>();
CamImageBox.Image = iplImage; // Show Image<,> object in *ImageBox*

请注意

  

OpenCV 3.0起,IplImage正逐渐被淘汰。 EmguCV 3.0是   跟随。图像&LT;,&GT;尚未正式弃用,但请保留   记住这一点。

因此,请注意在EmguCV 3.0中QueryFrame()将返回Mat!有关详细信息,请参阅此答案:https://stackoverflow.com/a/19119408/7397065

此外,如果将ImageBox元素更改为GUI中的PictureBox元素,则当前代码将起作用