gpt4 book ai didi

python - cv2.imread 和 cv2.imshow 返回全零和黑色图像

转载 作者:行者123 更新时间:2023-12-04 12:49:56 74 4
gpt4 key购买 nike

我已经使用 PPT 创建了一个 *.png 图像。

我想用cv2-python阅读并展示它。但是cv2.imshow给了我一张全黑的图像,上面什么都没有。这是我的代码,就是不知道哪里错了:

img = cv2.imread(r"C:/Users/.../Test_shapes.png")
print img.max(),img.shape
cv2.imshow('color_image',img)
cv2.waitKey()

附言 img.shape返回正确的形状 (881, 1803, 3)。但是 img.max()返回 0。

抱歉,我没有足够的声誉在此处添加图片。但是使用 Matlab,我的 *.png 可以成功读取,最大值为 108。

最佳答案

当您在可能是白色的 Canvas 上绘制一些黑线时,通常会发生这种情况。大多数应用程序导出具有透明背景的 PNG,即使可见 Canvas 是白色的。
结果是图像仅由黑色像素和透明像素组成。那些透明的,通常也有 0.0.0 的 RGB 值——所以如果我们只看 RGB 值,一切都是黑色的。
例如。在inkscape中,您可以在绘图下方放置一个白色矩形,以使PNG导出器真正节省一些白色背景。
两者,默认 cv2.imread("file.png", cv2.IMREAD_COLOR)cv2.imread("file.png", cv2.IMREAD_GRAYSCALE)忽略透明度,只看到 RGB 值。这很糟糕,因为完全透明像素的 RGB 值毫无意义。
只有 cv2.imread("file.png", cv.IMREAD_UNCHANGED)可以访问透明 channel 。我们提取 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 根本不是透明胶片的 friend 。都没有 cv.add() ,也不是 cv2.addWeighted()可以轻松应用 alpha channel 。
抱歉,5 年后忍不住挖出这个没有答案的僵尸。我的解决方案很有效,当 alpha channel 中只有信息时,当信息同时存在于 rgb channel 和 alpha channel 中时。

关于python - cv2.imread 和 cv2.imshow 返回全零和黑色图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31656366/

74 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com