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

时间:2018-11-03 19:58:37

标签: c# opencv emgucv

  • 为什么Mat在EmguCV中不够用?
  • 为什么Matrix<>无法从文件本身加载图像?

例如,

Mat img = new Mat(path);

是有效的操作。但是

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

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

无效的操作。

1 个答案:

答案 0 :(得分:2)

根据Emgu Wiki的信息,两种类型之间的根本区别在于是否对基础数据数组进行管理。

Mat是C ++ cv::Mat类的包装。通常,此类充当智能指针,用于管理为其拥有的数据数组分配的内存(尽管它也能够观察到-这种功能的一个很好的例子是能够返回Mat标头C#中的Matrix实例)。这意味着OpenCV能够根据需要(重新)分配内存。折衷是在这种情况下,more difficult是在C#中有效访问基础数据的方法。

Matrix类使用托管数组来保存数据。这意味着您可以轻松地使用C#访问底层数据数组。

老实说,最能告诉您为什么无法从图像文件加载Matrix的人是作者。我的猜测是它打算代表图像以外的其他事物。从技术上讲,可以像向Mat包装器提供加载图像文件的功能一样添加此功能(C ++等效项没有这种功能)。