我正在使用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)

但是,由此我在step3上收到以下错误:
    operands could not be broadcast together with shapes (780,1080) (780,1080,3)

如果我将step2替换为:
    cv2.imwrite("2.png", thresh1)
    img = cv2.imread("2.png")

然后一切正常。我不明白实际保存然后从磁盘读取同一图像与仅将img分配给thresh1的区别

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

最佳答案

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

嗯,就像berak所说的那样,在您将少转换为RGB之前,最好先使用img&less

或者:

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

而其余的代码应该可以正常工作。

关于python - 操作数不能与形状(780,1080)一起广播(780,1080,3),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/19346365/

10-16 12:59