Вы смешиваете порядок аргументов.
См. Документацию 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
.
Я не могу сказать, правильно это или нет.
Я должен предположить, что это выходит за рамки вашего вопроса ...