我正在使用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
有没有办法可以避免从磁盘写入和读取图像?
答案 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