在EmguCV中,Matrix<TDepth>和Mat之间的根本区别是什么?

3
  • 为什么在EmguCV中Mat不足够?
  • 为什么Matrix<>不能自己从文件加载图像?

例如,

Mat img = new Mat(path);

这是一个有效的操作。但是,

Matrix<byte> img = new Matrix<byte>(path);

或者,

Matrix<byte> img = Matrix<byte>.FromFile(path);

不是有效的操作。


很多那些“额外”的类看起来要么像是包装遗留事物的东西,要么是为了在托管环境中工作而方便。我认为,在大多数情况下,如果你想充分利用OpenCV本身,使用Mat就足够了。通常直接访问单个像素有点反模式(你会错过所有优化的OpenCV功能)。 - Dan Mašek
1个回答

4

根据Emgu Wiki提供的信息,这两种类型的基本区别在于底层数据数组是否受管理。

Mat是C++ cv::Mat类的一个包装器。一般来说,这个类作为一个智能指针,管理它所拥有的数据数组分配的内存(尽管它也可以只观察--这种能力的一个很好的例子是在C#中返回Matrix实例的Mat头文件)。这意味着OpenCV能够(重新)分配必要的内存。然而,在这种情况下,以这种方式访问底层数据更加困难(更多信息)Matrix类使用托管数组来保存数据。这意味着你可以很容易地在C#中访问底层数据数组。
说实话,最能告诉你为什么无法从图像文件中加载 Matrix 的人应该是作者。 我猜这是为了表示其他东西而不是图像。 从技术上讲,可以通过与给 Mat 包装器添加加载图像文件的功能相同的方式来添加此功能(C++ 等效项没有此功能)。

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