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

问题描述 投票:0回答:1
Image<Bgr, Byte> ImageFrame = capture.QueryFrame();  //line 1
CamImageBox.Image = ImageFrame.ToBitmap();

我已将上面的代码用于 Windows 窗体图片框中的

Display
EmguCV
图像,

但我有一个错误:

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

Stackoverflow 问题中也有这种情况,但没有人对此给出正确答案。

c# emgucv
1个回答
0
投票

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

ImageBox 是一个与 PictureBox 类似的用户控件。代替 显示 Bitmap,它显示任何 Image<,> 对象。它还提供 用于简单图像处理的额外功能。

在您的代码示例中,您的“CamImageBox”元素是一个

ImageBox
。将
Bitmap
添加到
ImageBox
确实会导致以下错误:

无法将类型“System.Drawing.Bitmap”隐式转换为 'Emgu.CV.IImage'

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 是 跟随。 Image<,> 尚未正式弃用,但请保留 记住这一点。

因此,请注意,在 EmguCV 3.0 中

QueryFrame()
将返回
Mat
!有关更多信息,请参阅此答案:https://stackoverflow.com/a/19119408/7397065

此外,如果您将 GUI 中的 ImageBox 元素更改为

PictureBox
元素,您当前的代码
将会工作

© www.soinside.com 2019 - 2024. All rights reserved.