You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

图像(x,y)坐标转行主序线性索引的公式正确性验证

坐标到一维数组映射的正确性分析

这个问题得拆成两个核心点来看——坐标的起始编号(1-based还是0-based),以及一维数组的索引规则,咱们一步步捋:

首先明确前提:行主序的定义是统一的——先存完一整行的所有像素(从左到右,也就是x从小到大的顺序),再依次存储下一行,直到所有像素都存入一维数组。

接下来分情况讨论:

  • 情况1:坐标和数组都用1-based编号
    如果你的(x,y)坐标是从1开始计数(x范围1600,y范围1400),同时一维数组的索引也是从1开始(第一个像素位置是1,最后一个是240000),那公式 pixel = (y-1)*width + x 完全正确。
    举个验证例子:

    • 第一行第一个像素(x=1,y=1):(1-1)*600 +1 =1,对应数组第1个元素,符合预期;
    • 最后一行最后一个像素(x=600,y=400):(400-1)*600 +600 = 240000,正好对应数组最后一个元素的位置。
  • 情况2:坐标是1-based,但数组是0-based(绝大多数编程语言的默认规则)
    这时候这个公式就有问题了。因为0-based数组的第一个元素索引是0,但按公式算(x=1,y=1)会得到1,偏移了一位。
    正确的公式应该调整为:pixel = (y-1)*width + (x-1)
    验证例子:

    • (x=1,y=1):(1-1)*600 + (1-1) =0,对应数组第一个元素;
    • (x=600,y=400):(400-1)*600 + (600-1) =239999,正好是240000个元素的最后一个索引(0到239999共240000个元素)。
  • 补充:如果坐标本身是0-based
    要是你的(x,y)从0开始计数(x范围0599,y范围0399),那:

    • 0-based数组用公式:pixel = y*width +x;
    • 1-based数组用公式:pixel = y*width +x +1。

总结一下:你给出的公式是否正确,完全取决于你的坐标系统和数组索引的起始规则——只有当两者都是1-based时,这个公式才成立;如果数组是0-based(更常见的场景),就需要把x也减1来修正。

内容的提问来源于stack exchange,提问作者user13378357

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.09 06:22:42