Image<Bgr, Byte> ImageFrame = capture.QueryFrame(); //line 1
CamImageBox.Image = ImageFrame.ToBitmap();
我在Windows窗体图片框中使用了Display
和EmguCV
图片的上述代码,
但我有一个错误:
无法将类型'system.drawing.bitmap'隐式转换为 'emgu.cv.image'
此案例也出现在Stackoverflow问题中,但没有人给出正确答案。
答案 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
元素,则当前代码将起作用。