我想编写一些通用函数,该函数对Opencv 3.1 cv::Mat
对象的单个元素进行操作,例如:
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<float>(mat)
正确调用它accumulate
用户的责任。这是一个著名的错误来源(堆栈溢出充满了问题,因为人们在调用at
时使用错误的类型)。
如何避免这种情况并自动执行此过程?
OpenCV 中有一个从 Mat
类派生的Mat_<T>
模板。您也许可以使用cv::Mat_<T> mat
.
然后,您应该能够在cv::Mat_<float>
上拨打accumulate()
例如。
请参阅 OpenCV Mat_
类参考:http://docs.opencv.org/trunk/df/dfc/classcv_1_1Mat__.html#gsc.tab=0