c – OpenCV遍历列

c – OpenCV遍历列,第1张

概述我试图迭代一个矩阵的列(例如它的一串列向量,它们被连接成一个矩阵,我想分别在每个列向量上 *** 作).使用for循环很容易做到这一点: for(int n = 0; n < mat.cols; n++){ cv::Mat c = mat.col(n); // do stuff to c} 但是如果可能,我想使用迭代器来做,以便我可以使用std :: accumulate或std :: 我试图迭代一个矩阵的列(例如它的一串列向量,它们被连接成一个矩阵,我想分别在每个列向量上 *** 作).使用for循环很容易做到这一点:
for(int n = 0; n < mat.cols; n++){    cv::Mat c = mat.col(n);    // do stuff to c}

但是如果可能,我想使用迭代器来做,以便我可以使用std :: accumulate或std :: transform来简化代码.

所以我基本上寻找像

for each Mat c in mat.columns

Mat已经开始<>并且结束<功能,但据我所知,它只能用于迭代单个元素. 可以这样做吗 只是为了清楚我想写

cv::Mat input;cv::Mat output = std::accumulate(input.begincols(),input.endcols(),cv::Mat::zeros(n,k,CV_64F),[](const cv::Mat &acum,const cv::Mat &column) { return acum + column * 5; });

一个简单的例子.

更新:

所以既然这还没有得到回答,如果有人有一个本土化的解决方案来提供这样的迭代器,我会看看,否则我可以自己研究一下,如果我有机会

解决方法 也许重载累积函数可以帮助.而不是(可能实施标准)
template<class inputIt,class T>T std::accumulate(inputIt first,inputIt last,T init){   for (; first != last; ++first) {        init = init + *first;   }   return init;}

你可以自己写,积累.

template<class inputIt,T init,std::size_t incr){   for (; first != last; first += incr) {        init = init + *first;   }   return init;}

将其用于您的图像.你必须使用steplength(Math :: step1()我猜)为incr.这应该有效,但我还没有测试.如果为您工作,请提供反馈.

总结

以上是内存溢出为你收集整理的c – OpenCV遍历列全部内容,希望文章能够帮你解决c – OpenCV遍历列所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1233218.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-06
下一篇 2022-06-06

发表评论

登录后才能评论

评论列表(0条)

保存