1

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

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

我这样做阈值(步骤1):

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

然后我分配thresh1img(步骤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)

如果我将 step2 替换为:

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

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

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

4

2 回答 2

1

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

img&less啊,正如 berak 所说,在您将 less 转换为 RGB 之前,您可能会很好。

或者:

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

并且您的代码的其余部分应该可以工作。

于 2013-10-13T15:10:31.207 回答
0

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

于 2013-10-13T14:59:07.513 回答