将 Mat 拆分为相同大小的 subMat

Posted

技术标签:

【中文标题】将 Mat 拆分为相同大小的 subMat【英文标题】:Splitting Mat into subMat of the same size 【发布时间】:2013-10-09 06:17:59 【问题描述】:

我正在使用 Visual Studio 2012 和 OpenCV 库在 2.4.6 版中进行 C++ 编程。

我想知道如何将一个 Mat 对象分成 n 个相同大小的 subMat。 让我更好地解释一下:我有一个 12 行和 24 列的垫子。假设你想把它分成 3 行 6 列,从而得到 18 个 4 * 4 的单元格。这些单元格中的每一个都是初始 Mat 的一个 subMat。我想知道是否有快速的方法来做到这一点。

提前谢谢你。

【问题讨论】:

【参考方案1】:

您可以使用colRangerowRange

这样的事情可能会有所帮助:

cv::Mat mat(12, 24, CV_8U);
cv::Mat imageBlock;
std::vector<cv::Mat> imageBlocks;
int blockSize = 4;
for(i = 0; i < 12; i += blockSize)

    for(j = 0; j < 24; j += blockSize)
    
        imageBlock = mat.rowRange(i, i + blockSize).colRange(j, j + blockSize);
        imageBlocks.push_back(imageBlock);
    

【讨论】:

迭代限制不应该是i &lt; 12j &lt; 24。我认为你在每个循环中得到的迭代太少了。范围的结尾也是排他性的,所以我认为blockSize - 1 的两个实例都应该只是blockSize 是的,你是对的,我已经编辑了帖子..但我不确定范围是排他的.. 参见docs.opencv.org/modules/core/doc/… : "endrow – 行跨度的唯一从 0 开始的结束索引。"

以上是关于将 Mat 拆分为相同大小的 subMat的主要内容,如果未能解决你的问题,请参考以下文章

如何将数据框拆分为与 R 大小相同的元素,由另一个大小重叠,保留每个元素?

将 3D MatND 拆分为 2D Mat opencv 的向量

将海量矩阵拆分为块

将列表拆分为 N 大小的较小列表

将数组拆分为具有最小块大小的给定大小的块

Java:如何将 ArrayList 拆分为多个小的 ArrayList?