Python cv2.imread和cv2.imshow返回全零和黑色图像
我已经使用PPT创建了一个*.png图像 我想使用Python cv2.imread和cv2.imshow返回全零和黑色图像,python,Python,我已经使用PPT创建了一个*.png图像 我想使用cv2python阅读并显示它。但是cv2.imshow给了我一张完全黑色的图像,上面什么也没有。这是我的代码,我只是不知道哪里出错了: img = cv2.imread(r"C:/Users/.../Test_shapes.png") print img.max(),img.shape cv2.imshow('color_image',img) cv2.waitKey() p、 s.img.shape返回正确的形状(8811803,3)。但是
cv2python
阅读并显示它。但是cv2.imshow
给了我一张完全黑色的图像,上面什么也没有。这是我的代码,我只是不知道哪里出错了:
img = cv2.imread(r"C:/Users/.../Test_shapes.png")
print img.max(),img.shape
cv2.imshow('color_image',img)
cv2.waitKey()
p、 s.img.shape
返回正确的形状(8811803,3)。但是img.max()
返回0
抱歉,我没有足够的声誉在这里添加图像。但是使用Matlab,我的*.png可以被成功读取,最大值为108。当你在白色画布上画一些黑线时,通常会发生这种情况。大多数应用程序导出具有透明背景的PNG,即使可见画布是白色的 结果是图像仅由黑色像素和透明像素组成。那些透明的,通常也有一个0.0.0的RGB值——所以如果我们只看RGB值,一切都是黑色的 例如,在inkscape中,您可以在图形下方放置一个白色矩形,使PNG导出器真正保存一些白色背景 默认的
cv2.imread(“file.png”,cv2.imread\u COLOR)
和cv2.imread(“file.png,cv2.imread\u GRAYSCALE)
忽略透明度,只查看RGB值。这是不好的,因为完全透明像素的RGB值没有意义
只有cv2.imread(“file.png”,cv.imread\u未更改)
才能访问透明频道。我们提取alpha,将其反转,然后将其添加回图像。这将在白色背景上模拟alpha:
img = cv2.imread("file.png", cv.IMREAD_UNCHANGED)
if img.shape[2] == 4: # we have an alpha channel
a1 = ~img[:,:,3] # extract and invert that alpha
img = cv2.add(cv2.merge([a1,a1,a1,a1]), img) # add up values (with clipping)
img = cv2.cvtColor(img, cv2.COLOR_RGBA2RGB) # strip alpha channel
cv2.imshow('aa', img); cv2.waitKey(0); cv2.destroyAllWindows()
cv2似乎根本不是透明胶片的朋友。无论是cv.add()
,还是cv2.addWeighted()
都不能轻松应用alpha通道
对不起,我忍不住在5年后挖出了这个没有答案的僵尸。当alpha通道中只有信息,而rgb通道和alpha通道中都有信息时,我的解决方案工作得很好。如果您将图像发布到第三方网页,我们可以通过编辑将其发布到您的问题中。您在何处声明了
灰色
?抱歉,这是一个打字错误。“灰色”应为“img”。我已经纠正了它。我用一个*.jpg图像尝试了代码,效果很好!为什么*.png不起作用???