Ошибка: только массивы размера 1 могут быть преобразованы в Python скаляры - PullRequest
0 голосов
/ 01 апреля 2020

Я работаю над матрицей NUMPT, я могу создать изображение HSV и после конвертировать его в изображение RGB. я создаю матрицу HSV с: matrix_=np.zeros([3, H-kernel+1, W-kernel+1], dtype=np.float32)

после того, как я заполнил ее значениями 255, тета угла, каждому значению: matrix_[:, row, column]=np.array([th, 255, mag]) наконец я преобразовываю его с помощью: cv2.cvtColor(matrix_, matrix_, cv2.COLOR_HSV2RGB)

но выдает: "TypeError: only size-1 arrays can be converted to Python scalars" в строке cv2.cvtColor. Почему? где я не прав?

1 Ответ

0 голосов
/ 01 апреля 2020

Вы смешиваете порядок аргументов.

См. Документацию cvtColor :

Python: cv2.cvtColor (sr c, код [, dst [, dstCn]]) → dst

Как видите, матрица назначения является третьим аргументом.
code является вторым аргументом.
code должен быть скалярным, но вы передаете matrix_ в качестве второго аргумента, поэтому вы получаете ошибку:
"TypeError: only size-1 arrays can be converted to Python scalars".

Чтобы избежать ошибки, вы можете использовать:

cv2.cvtColor(matrix_, cv2.COLOR_HSV2RGB, matrix_)

Лучше использовать возвращаемое значение (синтаксис более понятен):

matrix_ = cv2.cvtColor(matrix_, cv2.COLOR_HSV2RGB)

Теперь есть еще одно исключение: "Invalid number of channels in input image".

Вы установили неправильную форму матрицы:

Вместо matrix_=np.zeros([3, H-kernel+1, W-kernel+1], dtype=np.float32) должно быть:

matrix_=np.zeros([H-kernel+1, W-kernel+1, 3], dtype=np.float32)

Синтаксис matrix_[:, row, column]=np.array([th, 255, mag]) выглядит странно.
Вы не опубликовали значения row, column, th и mag.
Я не могу сказать, правильно это или нет.
Я должен предположить, что это выходит за рамки вашего вопроса ...

...