- 为什么在EmguCV中
Mat
不足够? - 为什么
Matrix<>
不能自己从文件加载图像?
例如,
Mat img = new Mat(path);
这是一个有效的操作。但是,
Matrix<byte> img = new Matrix<byte>(path);
或者,
Matrix<byte> img = Matrix<byte>.FromFile(path);
不是有效的操作。
根据Emgu Wiki提供的信息,这两种类型的基本区别在于底层数据数组是否受管理。
Mat
是C++ cv::Mat
类的一个包装器。一般来说,这个类作为一个智能指针,管理它所拥有的数据数组分配的内存(尽管它也可以只观察--这种能力的一个很好的例子是在C#中返回Matrix
实例的Mat
头文件)。这意味着OpenCV能够(重新)分配必要的内存。然而,在这种情况下,以这种方式访问底层数据更加困难(更多信息)。
Matrix
类使用托管数组来保存数据。这意味着你可以很容易地在C#中访问底层数据数组。Matrix
的人应该是作者。 我猜这是为了表示其他东西而不是图像。 从技术上讲,可以通过与给 Mat
包装器添加加载图像文件的功能相同的方式来添加此功能(C++ 等效项没有此功能)。
Mat
就足够了。通常直接访问单个像素有点反模式(你会错过所有优化的OpenCV功能)。 - Dan Mašek