什么是连续数组
What is a continuous array?
在OpenCV文档中,提到了连续数组。
"检查所有输入/输出阵列是否连续,即每行末尾是否没有间隙,这是有意义的。"
在每一行的末尾都没有间隙意味着什么。有人能举例说明吗?
在我看来,一个更好的词应该是"连续的"。
位图有一个"步长"的概念。"步长"使位图/像素图符合底层硬件或软件的特定对齐限制。"步幅"(也称为"间距")是一条扫描线的第一个字节与下一条扫描行的第一个字符之间的距离。位图/像素图阵列的总大小是间距乘以行数。
由于几个原因,间距不必与"sizeof(pixel)*width"相同。
第一个原因是数据必须对齐。例如,当一个像素是3个字节,并且扫描线必须对齐4个字节时,那么一个3像素宽的位图每个扫描线将包含9个字节的像素数据,但对齐将四舍五入到4的最接近的高倍数,这使其间距为12个字节。末尾的"额外"数据会使您发布的描述中的每条扫描线不"连续"。
另一个原因是,当你有一个更大的位图,比如1024x1024图片,然后从中提取一个子图片,比如128x64区域。您可以与原始位图共享数据,而不是复制数据,然后将"宽度"设置为128个像素,将"高度"设置为64个像素,设置"数据"指针指向子区域的第一个像素,并将步幅/间距设置为1024像素位图的步幅/节距——这样,您就可以指向同一位图数据中不同大小的多个区域。
当分配给OpenCV数组的所有内存都按顺序组织时,它是连续的。换句话说,不存在被这样的数组包围的变量:数组(图像、矩阵等)可以被视为一个"单行"向量。
在cv::Mat
中有一个叫做isContinuous
的方法来检查一个是否是连续的。从文件来看,解释它的引用:
该方法用于相当多的OpenCV函数中。关键是元素操作(如算术和逻辑运算、数学函数、alpha混合、颜色空间变换等)不依赖于图像几何体。因此,如果所有的输入和输出数组都是连续的,则函数可以将它们处理为非常长的单行向量。
在文档中寻找一个完整的解释(带示例)。
- 可以将两个相同类型的连续数组视为一个数组吗?
- 这种用于查找连续子数组中最大和的递归算法有什么优势吗?
- 查找连续子数组的第二小和
- 二进制数组中最大连续 1 的起始和结束索引,以 C++ 为单位
- std::array与C样式数组用于连续内存
- 在 Cython 中创建一个连续数组并将其传递给C++
- 在内存中连续分配的多维数组的实现
- 非重叠连续子数组的最大长度总和
- 用于查找连续子数组的最大总和的代码使测试用例失败
- 确定数组是否可以旋转 3 个连续的数组元素进行排序?
- 如何从数组中删除 2 个连续重复项? C++
- C++ 如何找出数组中最多的连续数字?
- 在随机生成的数组中查找重复的连续数字
- 子数组中两个数字的相同出现(连续)
- 连续字符串输入的C 动态数组
- 查找给定数组中长度为 k 的所有连续子数组的总和
- 调整小于连续数组的 C++ 矢量大小
- 如何在C++中动态分配连续的二维数组?
- 我如何连续地找到“占领”C 数组中的元素
- 一个非常大的数组(连续内存块)