Emgu.CV中KCFTracker初始化报错:无法将Bitmap转换为byte[,,*]
解决CS1503错误:Bitmap无法转换为byte[,,*]
问题根源
你写的new Image<Bgr, byte>(newFrame)这行代码里,当前EmguCV版本的这个构造函数不接受System.Drawing.Bitmap类型参数,它需要的是三维byte数组(对应图像BGR通道的像素数据),所以编译器抛出了类型不匹配的错误。
两种可行解决办法
办法1:用FromBitmap静态方法直接转换
这是最简洁的方式,直接调用EmguCV提供的静态方法完成Bitmap到Image的转换:
Bitmap newFrame = (Bitmap)eventArgs.Frame.Clone(); // 先把Bitmap转成EmguCV的Image对象 Image<Bgr, byte> emguImage = Image<Bgr, byte>.FromBitmap(newFrame); // 再传入Init方法 qrCode.KCFTracker.Init(emguImage, roi);
办法2:先初始化Image再赋值Bitmap
如果FromBitmap方法在你的EmguCV版本里不可用,可以先创建对应尺寸的Image对象,再把Bitmap赋值给它的Bitmap属性:
Bitmap newFrame = (Bitmap)eventArgs.Frame.Clone(); Image<Bgr, byte> emguImage = new Image<Bgr, byte>(newFrame.Width, newFrame.Height); emguImage.Bitmap = newFrame; qrCode.KCFTracker.Init(emguImage, roi);
额外提醒
- 不同版本的EmguCV API可能存在差异,要确保代码和当前使用的版本匹配
- 图像处理容易产生内存泄漏,用完相关对象记得释放资源:
emguImage.Dispose(); newFrame.Dispose();
内容的提问来源于stack exchange,提问作者Ugur Alp Balta
相关产品推荐
相关产品推荐

