需要跟踪opencv Mats的类型

时间:2010-07-16 15:06:54

标签: c++ templates macros types opencv

所以我正在编写一个程序中使用opencv中的类MatMat看起来像这样:

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

构造函数中的类型指定Mat中的元素是float s,int等,以及图像中的通道数。 depth()返回用于存储图像元素的数据类型。

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

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

编辑:使描述更准确。

2 个答案:

答案 0 :(得分:1)

您可能正在寻找Mat_<T>。黑白图像实际上与灰度图像不同,并且都不等于彩色图像。这些应该在编译时分开。

答案 1 :(得分:0)

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

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