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
相关产品推荐
相关产品推荐

