我想编写一些泛型函数,它对Opencv 3.1 AppBar
对象的单个元素进行操作,例如:
cv::Mat
问题是我读过Data Types并且我对如何实现(或调用)尊重它们的这种功能感到很困惑。
我的意思是:假设template <typename T>
T accumulate(cv::Mat mat){
T acc=0;
for(int i=0;i<mat.cols();i++)
for(int j=0;j<mat.rows();j++)
acc += mat.at<T>(i,j);
return acc;
}
类型为mat
。 CV_32FC
通过accumulate
正确调用它是accumulate<float>(mat)
用户的责任。这是一个着名的错误来源(堆栈溢出充满了问题,因为人们在调用at
时使用了错误的类型。)
如何避免这种情况并自动执行此过程?
答案 0 :(得分:0)
OpenCV中有Mat_<T>
个模板派生自Mat
类。您可以使用cv::Mat_<T> mat
。
然后,您应该可以在accumulate()
上致电cv::Mat_<float>
。
请参阅OpenCV Mat_
类参考:
http://docs.opencv.org/trunk/df/dfc/classcv_1_1Mat__.html#gsc.tab=0