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

OpenCV通过形心坐标读取像素BGR值出现IndexError越界如何解决

错误原因

OpenCV读取的图像以numpy数组格式存储,数组维度顺序为(高度, 宽度, 通道数),第一个维度对应垂直方向的y轴坐标,第二个维度对应水平方向的x轴坐标。
你给出的图像尺寸为898×598,对应宽度898、高度598,因此数组的shape为(598, 898, 3),轴0(高度维度)的最大有效索引为597,轴1(宽度维度)的最大有效索引为897。
你调用img[cX,cY]时,把水平方向的x坐标放到了对应高度维度的第一个索引位置,当cX值为648时,已经超过了轴0的最大长度598,因此触发索引越界报错。而img[300,300]的两个数值均小于598和898,无论索引顺序是否正确都不会触发报错,因此你没有察觉到索引顺序问题。

解决方法

把索引的x、y顺序调换即可,正确写法为:

bgr_list = img[cY, cX]

为了避免后续因坐标计算误差导致越界,可增加一步边界校验逻辑:

# 先获取图像的高、宽参数
h, w = img.shape[:2]
# 把坐标限制在合法范围内
cX = max(0, min(cX, w - 1))
cY = max(0, min(cY, h - 1))
# 读取对应位置的BGR值
bgr_list = img[cY, cX]

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 14:36:06