操作数不能与形状一起播放(780,1080)(780,1080,3)

时间:2013-10-13 14:34:45

标签: python opencv image-processing numpy

我正在使用opencv和numpy进行图像处理。

我正在对图像进行阈值处理,然后对其进行一些处理,然后用原始图像对其进行掩码处理。

我做这样的门槛(步骤1):

    ret,thresh1 = cv2.threshold(gray,210,255,cv2.THRESH_TOZERO)

然后我将thresh1分配给img(第2步):

    img = thresh1

我这样掩饰(步骤3):

    final = img&cv2.cvtColor(less, cv2.COLOR_GRAY2BGR)

然而,有了这个,我在第3步得到以下错误:

    operands could not be broadcast together with shapes (780,1080) (780,1080,3)

如果我将步骤2替换为:

    cv2.imwrite("2.png", thresh1)
    img = cv2.imread("2.png")

然后一切正常。我无法理解实际保存然后从磁盘读取相同图像与仅将img分配给thresh1

的区别

有没有办法可以避免从磁盘写入和读取图像?

2 个答案:

答案 0 :(得分:1)

至于文件写入/读取使其工作的原因,img / thresh是单通道图像。当您将其写入png格式时,它将被转换为RGB(或更确切地说是BGR)。因此,当您重新加载它时,它现在是一个BGR图像,它与您转换的less图像的形状相匹配。

啊,就像berak说的那样,在将less转换为RGB之前,你可能会对img&less没问题。

可替换地:

img = cv2.cvtColor(thresh1, cv2.COLOR_GRAY2BGR)

,你的代码的其余部分应该可以工作。

答案 1 :(得分:0)

&的两个操作数都需要相同数量的通道。您可能希望跳过cv2.cvtColor()并直接使用img & less