тупица.Ошибка оси: ось 2 выходит за пределы массива измерения 0

#python #image #numpy #opencv #image-processing

Вопрос:

Я создаю программу, для которой требуется черно-белое изображение и два массива, содержащие координаты X и Y как черных, так и белых пикселей соответственно. У меня есть программа, которая использует OpenCV и двоичное пороговое значение для создания черно-белого изображения (исходный код). «Слышь» — это код, который у меня пока есть в полном объеме.

 #Load image
im = cv2.imread('image.png')

#create grey image
grayImage = cv2.cvtColor(im, cv2.COLOR_BGR2GRAY)

#create full black and white image
(thresh, blackAndWhiteImage) = cv2.threshold(grayImage, 127, 255, cv2.THRESH_BINARY)

#Define black and white
black = [0,0,0]
white = [255,255,255]

#Get X and Y coordinates of both black and white
Xb,Yb = np.where(np.all(blackAndWhiteImage==black,axis=2))
Xw,Yw = np.where(np.all(blackAndWhiteImage==white,axis=2))

#combine x and y
Bzipped = np.column_stack((Xb,Yb))
Wzipped = np.column_stack((Xw,Yw))

#show
print(Bzipped,Wzipped)
 

Проблема, с которой я столкнулся, возникает в этих строках

 Xb,Yb = np.where(np.all(blackAndWhiteImage==black,axis=2))
Xw,Yw = np.where(np.all(blackAndWhiteImage==white,axis=2))
 

при запуске программы появляется ошибка numpy.Ошибка оси: ось 2 выходит за рамки, для массива размера 0 показана.

Что означает эта ошибка и как я могу исправить программу?

Комментарии:

1. «массив измерения 0» предполагает, что blackAndWhiteImage он пуст. проверьте значения всех переменных/массивов и повторите результаты.

Ответ №1:

Замените эти две строки кода следующими строками:

 #Black
(Xb, Yb) = np.where(blackAndWhiteImage==0)
#white
(Xw, Yw) = np.where(blackAndWhiteImage==255)
 

Здесь происходит то, что blackAndWhiteImage это двоичное изображение. Таким образом, он содержит только один канал. Следовательно, axis=2 недопустимо для одноканального изображения, а также вы сравнивали значение изображения [0, 0, 0] or [255, 255, 255] с тем, что невозможно, так как изображение содержит значения, равные 0 or 255 только.