gpt4 book ai didi

c++ - OpenCV 遍历列

转载 作者:可可西里 更新时间:2023-11-01 16:21:19 24 4
gpt4 key购买 nike

我正在尝试遍历矩阵的列(例如,它是一堆连接成矩阵的列 vector ,我想分别对每个列 vector 进行操作)。使用 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

Matbegin<>end<>函数,但据我所知,它只能用于迭代单个元素。

这能以某种方式完成吗?

为了清楚起见,我想写

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; });

举个简单的例子。

更新:

所以由于这个问题还没有得到解答,如果有人有自己开发的解决方案来提供这样的迭代器,我会看一看,否则如果有机会我可能会自己研究一下

最佳答案

也许重载 accumulate 函数会有所帮助。而不是(标准的可能实现)

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, class T>
T std::accumulate(InputIt first, InputIt last, T init, std::size_t incr)
{
for (; first != last; first += incr) {
init = init + *first;
}
return init;
}

将它用于您的图像。你必须使用步长(我猜是 Math::step1() )来增加。这应该有效,但我还没有测试过。如果对您有用,请提供反馈。

关于c++ - OpenCV 遍历列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22362741/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com