Я пытаюсь создать программу, которая обрабатывает скриншот в уменьшенное красное изображение только с тремя цветами. Я ожидал получить изображение, однако, я выполнил эту ошибку.for x in range(29):
for y in range(112):
if x and y == 0:
continue
duplicate = False
for z in range(colourFrequency.shape[0]):
if colourFrequency[z][2] = colourFrequency[z][3]:
duplicate = True
colourFrequency[z][1] += 1
break
if duplicate == False:
colourFrequency = np.append(colourFrequency, [image[x][y][2], 1, image[x][y][2], image[x][y][2]])
< /code>
Специально, эта строка. < /p>
if colourFrequency[z][2] = colourFrequency[z][3]:
Я уже искал Stackoverflow и нашел кого -то, у кого была похожая ошибка (как исправить индексерр: недопустимый индекс к скалярной переменной), однако я не смог реализовать предложения, найденные на этой странице, не нарушая код. /> Вот полный сценарий на всякий случай. Строки с 4 по 15 были проверены и работают правильно, однако я не смог проверить остальные, поэтому, вероятно, все еще есть некоторые проблемы. < /P>
import cv2
import numpy as np
#Crop and resize image
image = cv2.imread("sample.png",cv2.IMREAD_COLOR)
image = image[526:961, 0:1680]
image = cv2.resize(image, (112,29))
#Filter the B and G values from the image
for x in range(29):
for y in range(112):
image[x][y][0] = 0
image[x][y][1] = 0
#Create an array where information about each colour present in the image is stored
colourFrequency = np.array([[image[0][0][2], 1, image[0][0][2], image[0][0][2]]])
#Find and store each unique colour in the array
for x in range(29):
for y in range(112):
if x and y == 0:
continue
duplicate = False
for z in range(colourFrequency.shape[0]):
if colourFrequency[z][2] = colourFrequency[z][3]:
duplicate = True
colourFrequency[z][1] += 1
break
if duplicate == False:
colourFrequency = np.append(colourFrequency, [image[x][y][2], 1, image[x][y][2], image[x][y][2]])
#Sort the array according to how high the R value is
counterRed = 0
for x in range(256):
for y in range(colourFrequency.shape[0]):
if colourFrequency[y][0] == x:
np.insert(colourFrequency, counterRed, colourFrequency[int(y)])
np.delete(colourFrequency, y+1)
counterRed += 1
continue
#Simplifies the colours into 3 distinct colours based on how close it is in the R value and how common it is
counterPixel = 1
while colourFrequency.shape[0] > 3:
index = -1
for x in range(colourFrequency.shape[0]):
if colourFrequency[x][1] == counterPixel:
index = counterPixel
if index < 0:
counterPixel += 1
elif index == 0:
colourFrequency[index + 1][0] = round(((colourFrequency[index + 1][0] * colourFrequency[index + 1][1])+(colourFrequency[index][0] * colourFrequency[index][1])) / (colourFrequency[index + 1][1] + colourFrequency[index][1]))
colourFrequency[index + 1][1] = colourFrequency[index + 1][1] + colourFrequency[index][1]
colourFrequency[index + 1][2] = colourFrequency[index][2]
np.delete(colourFrequency, index)
elif index == 255:
colourFrequency[index - 1][0] = round(((colourFrequency[index - 1][0] * colourFrequency[index - 1][1])+(colourFrequency[index][0] * colourFrequency[index][1])) / (colourFrequency[index - 1][1] + colourFrequency[index][1]))
colourFrequency[index - 1][1] = colourFrequency[index - 1][1] + colourFrequency[index][1]
colourFrequency[index - 1][3] = colourFrequency[index][3]
np.delete(colourFrequency, index)
else:
diffBefore = (colourFrequency[index][1] - colourFrequency[index - 1][1])/(colourFrequency[index][0] - colourFrequency[index - 1][0])
diffAfter = (colourFrequency[index + 1][1] - colourFrequency[index][1])/(colourFrequency[index + 1][0] - colourFrequency[index][0])
if diffBefore > diffAfter:
colourFrequency[index - 1][0] = round(((colourFrequency[index - 1][0] * colourFrequency[index - 1][1])+(colourFrequency[index][0] * colourFrequency[index][1])) / (colourFrequency[index - 1][1] + colourFrequency[index][1]))
colourFrequency[index - 1][1] = colourFrequency[index - 1][1] + colourFrequency[index][1]
colourFrequency[index - 1][3] = colourFrequency[index][3]
else:
colourFrequency[index + 1][0] = round(((colourFrequency[index + 1][0] * colourFrequency[index + 1][1])+(colourFrequency[index][0] * colourFrequency[index][1])) / (colourFrequency[index + 1][1] + colourFrequency[index][1]))
colourFrequency[index + 1][1] = colourFrequency[index + 1][1] + colourFrequency[index][1]
colourFrequency[index + 1][2] = colourFrequency[index][2]
np.delete(colourFrequency, index)
#Substitutes each colour for its simplified equivalent
for x in range(29):
for y in range(112):
for z in range(colourFrequency.shape[0]):
if colourFrequency[z][2]
Подробнее здесь: https://stackoverflow.com/questions/795 ... g-iterated
Почему индексерра происходит, когда я пытаюсь использовать переменную, которая итерации для доступа к данным в массиве и ⇐ Python
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение
-
-
Странная индексерра при создании файла HDF5 с пандами в режиме таблицы
Anonymous » » в форуме Python - 0 Ответы
- 4 Просмотры
-
Последнее сообщение Anonymous
-