【问题标题】:How to define and use opencv mat of user type如何定义和使用用户类型的opencv mat
【发布时间】:2013-07-05 08:25:31
【问题描述】:

我的问题和a cv::Mat of std::vector ... how do I?的问题类似

我需要一个矩阵,其中每个元素都是一个 std::vector。该矩阵是对一系列相同大小的图像(如视频)进行计算的输出。许多计算都是典型的 cv 函数(转换为灰度、框过滤器等),然后将像素的值添加到向量中。我事先不知道我将拥有多少张图片,无论如何,我不能使用频道概念,因为图片可能超过 512 张。

其中一个建议的答案是使用指针垫。那么,如果我尝试以下方法,它会起作用吗?

这将在 Windows 机器上,我知道指针大小为 INT-PTR 64 位宽。然后我可以使用 CV_64 但只定义了 CV_64F。由于我不会对这个矩阵进行任何计算,我可以用它来存储指针吗?我在想,在读取第一张图像之前,我将获取大小,创建此矩阵,使用“new std::vector”为每个像素创建向量并将该指针存储在元素中。在我的计算循环中,我使用相同的访问偏移量来读取原始图像并将输出存储在向量中。完成向量后,我需要在释放 cv::mat 之前删除它们。

感谢那些比我更了解 opencv 的人提供的任何意见 - 这确实来自第一个使用 opencv 的应用程序。

【问题讨论】:

  • 鉴于这是您的第一个 OpenCV 应用程序,我是否可以建议将您的用户类型放入矩阵中可能不是您想要做的?难道你不能创建一个存储普通值矩阵的用户类型,然后存储一个向量,其中每个向量元素代表一帧的结果吗?
  • 正如我引用的示例,我需要快速访问第三维中的所有数据。矩阵向量不会给我这个。

标签: c++ windows opencv


【解决方案1】:

试试

cv::Mat_<your_type>

http://docs.opencv.org/modules/core/doc/basic_structures.html#id7

特别是:

To use Mat_ for multi-channel images/matrices, pass Vec as a Mat_ parameter 

有一个很好的例子,你可以使用你自己的“混合”Vec (假设每个元素的数组/向量的大小是固定的),或者如果你真的需要你可以使用std::vector

【讨论】:

  • 谢谢!这应该这样做。由于我在编译时(实际上在运行时计算之前)不知道我将拥有多少张图像,所以我不能使用已知大小的向量。我将尝试 Mat_ 并在此处更新我的成功。
  • 这就是我所做的 - 它似乎按预期工作。
    typedef std::vector MyVector, *LPMyVector;
    cv::Mat_ m_matPtrs;
    一开始,我分配这些向量并在我的计算中使用它。这使我可以使用 opencv 函数处理图像并将结果存储在同一循环中的该矩阵中。
    再次感谢。
猜你喜欢
  • 2012-04-27
  • 1970-01-01
  • 2014-06-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-07-09
  • 1970-01-01
相关资源
最近更新 更多