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

numpy.AxisError报错axis2越界 如何修复OpenCV黑白像素坐标提取代码

报错含义

numpy.AxisError: axis 2 is out of bounds for array of dimension 0的核心原因是维度不匹配:

  • 经过cv2.threshold处理得到的blackAndWhiteImage是单通道二值图,数组维度为(图像高度, 图像宽度),仅存在2个维度(对应axis=0为高度方向/Y轴,axis=1为宽度方向/X轴),不存在axis=2的第三维度。
  • 你定义的black = [0,0,0]、white = [255,255,255]是三通道BGR格式的颜色值,和单通道图像的像素值(单数字0/255)格式不匹配,强行比较后得到的数组维度进一步异常,最终触发axis越界错误。
修复方案

直接针对两个不匹配问题修改即可:

  • 单通道图像的黑白像素值直接用单个数字表示,不需要三元素数组
  • 无需调用np.all指定axis参数,直接判断像素值相等即可获取对应坐标
修改后可运行代码
import cv2
import numpy as np

# 加载图像
im = cv2.imread('image.png')

# 生成灰度图
grayImage = cv2.cvtColor(im, cv2.COLOR_BGR2GRAY)

# 生成二值黑白图
(thresh, blackAndWhiteImage) = cv2.threshold(grayImage, 127, 255, cv2.THRESH_BINARY)

# 定义单通道下的黑白像素值
black = 0
white = 255

# 获取黑白像素的坐标(删除np.all和无效的axis=2参数)
Xb,Yb = np.where(blackAndWhiteImage == black)
Xw,Yw = np.where(blackAndWhiteImage == white)

# 组合坐标
Bzipped = np.column_stack((Xb,Yb))
Wzipped = np.column_stack((Xw,Yw))

# 输出结果
print(Bzipped,Wzipped)

注意:np.where返回的第一个数组是行索引(对应图像的Y轴坐标),第二个数组是列索引(对应图像的X轴坐标),如果你需要常规的(X,Y)顺序存储,可将column_stack的参数顺序调换为(Yb,Xb)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 17:54:02