矩阵型 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<float>(mat)
正确调用它是accumulate
用户的责任。这是一个著名的错误来源(堆栈溢出充满了问题,因为人们在调用at
时使用了错误的类型)。
我怎样才能避免这种情况并使这个过程自动化?
【问题讨论】:
请具体说明,他们到底有什么问题? 看看我更新的问题 这是一个著名的错误来源,因为它是 c++。我认为你能做的就是添加一个CV_ASSERT
检查以确保T
类型真的是Mat
类型,这就是opencv 人用来提醒API 客户端他的错误.
【参考方案1】:
OpenCV 中有一个Mat_<T>
模板派生自Mat
类。您也许可以使用cv::Mat_<T> mat
。
然后你应该可以在你的cv::Mat_<float>
上调用accumulate()
。
请参阅 OpenCV Mat_
类参考:
http://docs.opencv.org/trunk/df/dfc/classcv_1_1Mat__.html#gsc.tab=0
【讨论】:
以上是关于矩阵型 OpenCV的主要内容,如果未能解决你的问题,请参考以下文章