矩阵类型OpenCV

Matrix type OpenCV

本文关键字:OpenCV 类型      更新时间:2023-10-16

我想编写一些通用函数,该函数对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