您似乎混淆了PictureBox(由System.Windows.Forms中的.NET框架提供)和ImageBox(它是Emgu.CV.UI中的EmguCV類提供)。由於這兩個元素非常相似,所以很容易將它們混合起來。
ImageBox is a user control that is similar to PictureBox. Instead of displaying Bitmap, it display any Image<,> object. It also provides extra functionality for simple image manipulation.
在您的代碼示例中,您的'CamImageBox'元素是ImageBox
。添加Bitmap
到ImageBox
確實會導致以下錯誤:
Cannot implicitly convert type 'System.Drawing.Bitmap' to '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*
請注意,
as of OpenCV 3.0
, IplImage is being phased out. EmguCV 3.0 is following along. Image<,> is not officially deprecated yet, but keep this in mind.
因此,請當心,在EmguCV 3.0 QueryFrame()
將返回Mat
!看到這個答案的詳細資料:https://stackoverflow.com/a/19119408/7397065
而且,當前的代碼將工作如果你ImageBox
元素更改爲您的GUI一個PictureBox
元素。
我猜capture.QueryFrame()是一個System.Drawing.Bitmap。您應該嘗試像這樣加載它:Image ImageFrame = new Image (capture.QueryFrame()); –