#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
только.