我有一个4 * 5 * 6 3D矩阵。我想将其分为6个2D矩阵。目的是对这些2D矩阵进行数据运算并获得结果。尝试过row(),rowRange(),我遇到了错误。现在没有任何线索。有人提出更好的主意吗?谢谢〜
请记住,最后一个索引变化最快,所以也许您的意思是您有一个6 * 5 * 4的Mat,并希望将其分为六个5x4的Mat。根据文档“ 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
中得到5行x 6列的4张图像:
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的支持不是很好,因此请尽可能避免使用它们。一种替代方法是使用具有多个通道的2D Mat。这通常更容易处理。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句