矩阵型 OpenCV

Posted

技术标签:

【中文标题】矩阵型 OpenCV【英文标题】:Matrix type OpenCV 【发布时间】:2016-07-11 02:19:32 【问题描述】:

我想编写一些对 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; 

问题是我已经阅读了Data Types,但我对如何实现(或调用)尊重它们的此类函数感到很困惑。

我的意思是:假设mat 类型是CV_32FC。通过accumulate&lt;float&gt;(mat) 正确调用它是accumulate 用户的责任。这是一个著名的错误来源(堆栈溢出充满了问题,因为人们在调用at 时使用了错误的类型)。

我怎样才能避免这种情况并使这个过程自动化?

【问题讨论】:

请具体说明,他们到底有什么问题? 看看我更新的问题 这是一个著名的错误来源,因为它是 c++。我认为你能做的就是添加一个CV_ASSERT 检查以确保T 类型真的是Mat 类型,这就是opencv 人用来提醒API 客户端他的错误. 【参考方案1】:

OpenCV 中有一个Mat_&lt;T&gt; 模板派生自Mat 类。您也许可以使用cv::Mat_&lt;T&gt; mat

然后你应该可以在你的cv::Mat_&lt;float&gt; 上调用accumulate()

请参阅 OpenCV Mat_ 类参考: http://docs.opencv.org/trunk/df/dfc/classcv_1_1Mat__.html#gsc.tab=0

【讨论】:

以上是关于矩阵型 OpenCV的主要内容,如果未能解决你的问题,请参考以下文章

工作那些事(二十八)项目管理模式:项目型职能型矩阵型

matlab中怎样将double型矩阵转换为int8型矩阵

矩阵对应的二次型是啥?

1156: 零起点学算法63——弓型矩阵

R中数组,矩阵,数据框有啥区别

矩阵型 OpenCV