【问题标题】:Need to keep track of types of opencv Mats需要跟踪 opencv Mats 的类型
【发布时间】:2010-07-16 15:06:53
【问题描述】:

所以我在我正在编写的程序中使用来自 opencv 的 Mat 类。 Mat 看起来像这样:

class Mat {
    public:
        Mat(int width, int height, int type);
        template <typename T> T getElt(int x, int y);
        int depth();
        ...
}

构造函数中的类型指定Mat中的元素是否为floats、ints等以及图像中的通道数。 depth() 返回用于存储图像元素的数据类型。

不幸的是,我必须在我的代码中调用 getElt()。每当我这样做时,我都会使用switch 语句来检查Mat 的深度,这样我就可以使用适当的模板参数调用getElt()。这样做非常冗长,所以我想知道是否有更好的方法来做到这一点。我可以为Mat 创建一个容器并使用模板魔术创建一个返回类型而不是值的方法吗?或者我可以使用宏来使事情更高效和合乎逻辑吗?

我宁愿不必子类化 Mat,因为除了 getElt() 之外还有几种方法我有同样的问题。

编辑:使描述更准确。

【问题讨论】:

  • 如果你用“错误”的模板参数调用它会发生什么?你得到垃圾还是结果被转换为请求的类型?如果是后者,你可以一直使用双精度类型吗?
  • 那行不通:文档说类型必须与实际的矩阵类型匹配。

标签: c++ templates macros types opencv


【解决方案1】:

您可能正在寻找Mat_&lt;T&gt;。黑白图像确实与灰度图像不同,也不等于彩色图像。这些在编译时应该是分开的。

【讨论】:

    【解决方案2】:

    IIRC openCV MAT 中的“类型”对应于图像类型(即通道数)而不是数据类型 float/int/char 等。

    如果您想要一个可以透明地使用 char/int/bool/double 等的模板化图像类 - 请查看 CImg

    【讨论】:

    • 感谢推荐,但是我需要使用opencv提供的其他功能,我自己很难写。
    • 我是这么认为的!尽管 CImg 确实有很多功能 - 如果您需要模板图像类型,它是最好的图像库。
    猜你喜欢
    • 2016-02-03
    • 2010-12-09
    • 2022-08-16
    • 1970-01-01
    • 1970-01-01
    • 2023-03-29
    • 2012-11-17
    • 2021-07-13
    • 2021-11-27
    相关资源
    最近更新 更多