Почему выдается ошибка: setting an array element with a sequence
Задача данного куска программы - раскрасить точки, указанные в цикле, но почему то она выдает ошибку
Setting an array element with a sequence
на сроке img[x,y] = [0,255,0]
import cv2
import numpy as np
import math as m
import skimage.io as io
import skimage.transform as trans
from model import unet
import datetime as d
from PIL import Image
...
io.imsave (outName, resModel)
img_original = cv2.imread(filename,1)
img_original_b = cv2.imread(filename,0)
#цветное изображение раскрасски
img_rgb = cv2.imread(outName,1)
# Для восстановления модели, на которой рисовать
img_rgb_Kas = img_rgb.copy()
# черно-белое изображение раскрасски
img = cv2.imread(outName,0)
...
for x in range (int(M_end[0]),int(B_end[0])+1):
y = (-a/b)*x - c/b
y = int(y)
img[x,y] = [0,255,0]
Ответы (1 шт):
# черно-белое изображение раскрасски
img = cv2.imread(outName,0)
...
img[x,y] = [0,255,0]
Вопрос: сколько компонент у одного пиксела чёрно-белого изображения? Ответ: у него ровно одна компонента - яркость, это одно число. А вы пытаетесь присвоить элементу массива, в котором должно быть одно число, список из трёх чисел (видимо, это компоненты RGB). Поэтому и возникает такая ошибка:
Setting an array element with a sequence
Скорее всего, вы хотели рисовать на каком-то другом изображении.
Кстати, я проверил свои рассуждения:
import cv2
im = cv2.imread('result.png', cv2.IMREAD_COLOR)
print(im[0,0])
im = cv2.imread('result.png', cv2.IMREAD_GRAYSCALE)
print(im[0,0])
Вывод:
[255 255 255]
255
В случае, если мы читаем картинку как цветную - получаем три компоненты на пиксел. А если читаем как чёрно-белую - получаем одну компоненту, как я и говорил.
P.S. И ещё не используйте "магические константы", например 0 вместо именованной константы cv2.IMREAD_GRAYSCALE. Когда читаешь код, что такое параметр 0 у функции imread - непонятно, а вот если написать cv2.IMREAD_GRAYSCALE - уже сразу понятно, что это за параметр.