【问题标题】:Error: only size-1 arrays can be converted to Python scalars错误:只有 size-1 的数组可以转换为 Python 标量
【发布时间】:2020-04-01 16:37:54
【问题描述】:

我正在研究 numpt 矩阵,我可以创建一个 HSV 图像,然后将其转换为 RGB 图像。我创建了一个矩阵 HSV: matrix_=np.zeros([3, H-kernel+1, W-kernel+1], dtype=np.float32)

在我为每个值填充大小 255、角度 theta 之后: matrix_[:, row, column]=np.array([th, 255, mag]) 最后我将其转换为: cv2.cvtColor(matrix_, matrix_, cv2.COLOR_HSV2RGB)

但它在 cv2.cvtColor 行中抛出:“TypeError: only size-1 arrays can be converted to Python scalars”。为什么?我哪里错了?

【问题讨论】:

    标签: python opencv rgb numpy-ndarray hsv


    【解决方案1】:

    您正在混合参数的顺序。

    查看cvtColor的文档:

    Python:cv2.cvtColor(src, code[, 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]) 的语法看起来很奇怪。
    您没有发布rowcolumnthmag 的值。
    我不能说它是否正确。
    我必须假设它超出了您的问题范围......

    【讨论】:

    • 行和列是 int,我用它们来迭代矩阵,th 和 mag 是浮点数。怎么了?
    • 我没说错,只是怪怪的……我以前是从RGB开始,从RGB转成HSV,在HSV色彩空间里做一些处理,再转回RGB。
    • 我认为应该是[th, 1, mag] 而不是[th, 255, mag]。您的意图是修改单个像素对吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-25
    • 2021-12-24
    • 2021-12-13
    • 2021-12-01
    • 1970-01-01
    • 2019-11-11
    相关资源
    最近更新 更多