首页 > 解决方案 > 错误:只有 size-1 的数组可以转换为 Python 标量

问题描述

我正在研究 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 行。为什么?我哪里错了?

标签: pythonopencvrgbnumpy-ndarrayhsv

解决方案


您正在混合参数的顺序。

请参阅cvtColor的文档:

Python: cv2.cvtColor(src, code[, dst[, dstCn]]) → dst

如您所见,目标矩阵是第三个参数。是第二个论点
。应该是标量,但您作为第二个参数传递 ,所以您收到错误:. code
codematrix_
"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])看起来很奇怪。
您没有发布rowcolumnth的值mag
我不能说它是否正确。
我必须假设它超出了你的问题范围......


推荐阅读