c – OpenCV遍历列
发布时间:2020-12-16 07:53:07 所属栏目:百科 来源:网络整理
导读:我试图迭代一个矩阵的列(例如它的一串列向量,它们被连接成一个矩阵,我想分别在每个列向量上操作).使用for循环很容易做到这一点: for(int n = 0; n mat.cols; n++){ cv::Mat c = mat.col(n); // do stuff to c} 但是如果可能,我想使用迭代器来做,以便我可以
我试图迭代一个矩阵的列(例如它的一串列向量,它们被连接成一个矩阵,我想分别在每个列向量上操作).使用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.这应该有效,但我还没有测试.如果为您工作,请提供反馈. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |