Выполните итерацию по всем пикселям, чтобы проверить, какие из них белые, а какие - черные - PullRequest
0 голосов
/ 04 июня 2019

Я пытаюсь перебрать изображение только с черными и белыми пикселями.Для каждого черного пикселя я хочу уменьшить оценку, в то время как для каждого белого пикселя я хотел бы увеличить оценку.Однако после тестирования следующего кода я получаю эту ошибку:

ValueError: The truth value of an array with more than one element is ambiguous.

Это как-то связано с оператором img[i, j].Как может быть несколько пикселей в этом массиве?Я специально не называю один пиксель с помощью img[i,j]?Кто-нибудь знает, как я мог это исправить, или есть другой способ работы для доступа к одному конкретному пикселю?

def score(img):
    score = 0

    height, width, _ = img.shape
    for i in range(height):
        for j in range(width):
            if img[i, j] == [255,255,255]:
                score = score + 1
            else:
                score = score - 1
    print(score)

Изображение было прочитано с использованием библиотеки openCV.Исходное изображение затем фильтруется для определенного цвета, с помощью которого создается маска.Эта маска имеет только черные и белые пиксели, как упоминалось ранее.

img = cv2.imread("images/test.jpg")
mask = cv2.inRange(img, lower_bound, upper_bound)

Ответы [ 3 ]

1 голос
/ 04 июня 2019

Это происходит потому, что img[i, j] дает массив со значениями RGB

img [i, j] = [0, 0, 0] # для черного

img [i, j] = [255, 255, 255] # для белых

И эти массивы не связаны с True или False.Вам нужно изменить свое состояние.

>>> img[0,0] == [0,0,0]
array([ True,  True,  True])
>>> all(img[0,0] == [0,0,0])
True

Ваше состояние требует all().

0 голосов
/ 04 июня 2019

Вот и все = ^ .. ^ =

from PIL import Image

# load image
img = Image.open('BlackWhite.gif').convert('RGB')
pixel = img.load()

# calculate the score
score = 0
w=img.size[0]
h=img.size[1]
for i in range(w):
  for j in range(h):
      if pixel[i, j] == (255, 255, 255):
          score += 1
      elif pixel[i, j] == (0, 0, 0):
          score -= 1
0 голосов
/ 04 июня 2019

Это означает, что ваш массив имеет 3 измерения.Вы можете напечатать img[i,j], чтобы увидеть, как это выглядит.Требуемое значение, вероятно, часто находится в одной и той же позиции, поэтому вызов img[i,j,0] или img[i,j,1] должен работать

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...