2013-10-13 32 views
1

我正在使用opencv和numpy进行图像处理。操作数无法与形状一起播放(780,1080)(780,1080,3)

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

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

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

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

如果我更换第二步:

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

然后一切工作正常。我无法理解实际存储的差异,然后从磁盘读取相同的图像,而只是将img设置为thresh1

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

回答

1

至于为什么文件写入/读取使得它的工作,img/thresh是一个单通道图像。当你将它写入png格式时,它将被转换为RGB(或更确切地说BGR)。因此,当您重新加载它时,它现在是一个BGR图像,它与您转换的less图像的形状相匹配。嗯,就像berak说的那样,在转换为RGB之前,你可能会用img&less

或者:

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

和你的代码的其余部分应工作。

+0

感谢您的解释。另一种方法是阻力最小的路径:) – Anthony

0

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

+0

删除'cv2.cvtColor'上少修复这个问题,但进一步混淆了我在'最后'执行的处理 – Anthony

相关问题