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