所以我正在编写一个程序中使用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
中的元素是float
s,int
等,以及图像中的通道数。 depth()
返回用于存储图像元素的数据类型。
不幸的是,我必须在我的代码中调用getElt()
。每当我这样做时,我使用switch
语句来检查Mat
的深度,以便我可以使用适当的模板参数调用getElt()
。这样做是非常冗长的,所以我想知道是否有更好的方法来做到这一点。我可以为Mat
创建容器并使用模板魔术创建一个返回类型而不是值的方法吗?或者我可以使用宏来提高效率和逻辑吗?
我宁愿不必继承Mat
,因为除了getElt()
之外还有几种方法,我有同样的问题。
编辑:使描述更准确。
答案 0 :(得分:1)
您可能正在寻找Mat_<T>
。黑白图像实际上与灰度图像不同,并且都不等于彩色图像。这些应该在编译时分开。
答案 1 :(得分:0)
IIRC openCV MAT中的'type'对应于图像类型(即通道数)而不是数据类型float / int / char等。
如果你想要一个可以透明地使用char / int / bool / double等模板化的图像类,请看一下CImg