如何将位图转换为Image<Bgr, Byte>?

17

我正在使用OpenCV库进行图像处理。

我想将一个System.Drawing.Bitmap对象转换为Image<Bgr, Byte>对象。我应该如何实现这个转换呢?

6个回答

20

Image 构造函数有一个 Bitmap 重载(假设您正在使用 Emgu CV 封装器,因为您已将其标记为 .NET)。

Image<Bgr, Byte> myImage = new Image<Bgr, Byte>(myBitmap); 

错误:'Emgu.CV.CvInvoke' 的类型初始化程序引发了异常。 - Lemmouchi Rédha Dida
请尝试按照此处描述的步骤进行操作:http://www.emgu.com/wiki/index.php/Download_And_Installation#The_type_initializer_for_.27Emgu.CV.CvInvoke.27_threw_an_exception. - keyboardP
此构造函数已在4.2.0版本中移除。如果您使用的是更新版本,请查看其他(更新的)答案。 - Tobias Xy

17
在.NET中,我需要安装Emgu.CV.Bitmap 4.4.0.4099Emgu.CV.runtime.windows来使用bitmap.ToImage<Bgr, byte>()扩展方法。

1
谢谢,正是我在寻找的。尤其是因为当我浏览到他们的文档页面时,会出现一个异常... - Carra

17

Image<Bgr, byte> 的构造函数不再接受 Bitmap 作为参数。我不得不在 Emgu 版本 4.3 中使用以下代码:

Image<Bgr, byte> emguImage = bitmap.ToImage<Bgr, byte>();

我在GitHub和补丁说明中找到了它,官方文档教程没有得到正确的更新。


3
我正在使用 Emgu.CV 4.5.1.4349 在 NetStandard 2.1 上。 需要安装 Emgu.CV.Bitmap 和 Emgu.CV.runtime.windows,才能将您的位图转换为 Image<Bgr,byte>。
var myImage = myBitmap.ToImage<Bgr, byte>()

0

关注此事的人:

您应该将依赖的dll添加到项目中,并将“复制到输出目录”属性更改为“始终复制”(添加->现有项),路径为Emgu\emgucv-windows-universal-cuda 2.9.0.1922\bin\x86。

在我的项目中添加了以下文件:opencv_core290.dll,opencv_highgui290.dll,opencv_ffmpeg290.dll,opencv_imageproc290.dll和cudart32_55.dll。

来自:'Emgu.CV.CvInvoke'的类型初始值设定项引发了异常


0

我正在使用Emgu 4.3.0.3890,当我将我的代码与团队集成时,遇到了同样的问题。 让我困扰的是这一行:

Image<Bgr, byte> img = bitmap.ToImage<Bgr, byte>();

我没有看到构建创建了两个名为x86和x64的新目录。 当我发现它时,我将这两个目录添加到我的二进制文件位置,一切正常。 我没有时间去排除看看这些目录中的哪个文件是导致问题的,但是嘿,它起作用了。 :-)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接