gpt4 book ai didi

c++ - 如何使用 opencv C++ 将 3D 矩阵分成一堆 2D 矩阵

转载 作者:搜寻专家 更新时间:2023-10-31 01:47:25 25 4
gpt4 key购买 nike

例如,我有一个 4*5*6 的 3D 矩阵。我想把它分成 6 个二维矩阵。目的是对这些二维矩阵进行数据运算,得到结果。尝试了 row()、rowRange(),我得到了错误。现在没有线索。有人提出更好的想法吗?谢谢~

最佳答案

请记住,最后一个索引变化最快,所以也许您的意思是您有一个 6*5*4 的垫子,并且想将它分成六个 5x4 的垫子。根据documentation “3 维矩阵是逐个平面存储的”。

但是,假设您的 3D Mat 是这样创建的:

int dims[] = {4, 5, 6};
Mat m3(3, dims, CV_8UC1, data);

你可以做这样的事情来做你要求的(但可能不是你真正想要的):

Mat m2(4, 30, CV_8UC1, m3.data);
Mat m2x6 = m2.reshape(6);
std::vector<cv::Mat> channels;
cv::split(m2x6, channels);

但是,要从 m3 中取出 4 张 5 行 x 6 列的图像:

Mat p0(5, 6, CV_8UC1, m3.data + m3.step[0] * 0);
Mat p1(5, 6, CV_8UC1, m3.data + m3.step[0] * 1);
Mat p2(5, 6, CV_8UC1, m3.data + m3.step[0] * 2);
Mat p3(5, 6, CV_8UC1, m3.data + m3.step[0] * 3);

因为 OpenCV 对 3D Mats 的支持不是很好,所以尽可能避免使用它们。另一种方法是使用具有多个 channel 的 2D 垫。这通常更容易处理。

关于c++ - 如何使用 opencv C++ 将 3D 矩阵分成一堆 2D 矩阵,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19189475/

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