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

