【问题标题】:Is there any easy way to analyse transparent png image with cv2?有什么简单的方法可以用 cv2 分析透明的 png 图像吗?
【发布时间】:2020-01-20 06:26:24
【问题描述】:

我正在尝试使用 CV2 加载透明图像(只是没有背景),但是当我尝试显示图像时,我得到了黑色背景。是否有任何可能(且简单)的方法来加载透明的 PNG 图像? 输入:

结果:

这是我得到的结果: 即使我在努力 这段代码:

import cv2
im = cv2.imread("image.png", cv2.IMREAD_UNCHANGED)
cv2.imshow('test',im)

我得到黑色背景的结果

【问题讨论】:

  • 你能发布你用来加载和显示图像的代码的sn-p吗?
  • 请展示 Stack Overflow 问题所需代码的Minimal Complete and Verifiable Example,由于您的问题是关于图像处理的,请至少展示您的原始输入图像。谢谢。
  • 你有透明显示器吗?也许只是透过透明区域的黑色闪耀?显示器不能显示透明颜色。如果您没有明确指定背景,也许黑色只是默认设置。
  • 请将代码放在您的问题中,而不是放在未格式化且难以阅读的 cmets 中。您的问题的答案是您需要在cv2.imread() 中添加第二个参数。
  • cv::IMREAD_UNCHANGED = -1,但请记住,渲染 (imshow) 仍然不会使用透明度。

标签: python python-3.x opencv cv2


【解决方案1】:

您正在加载的图像有四个通道。检查数组大小。通道 4 是 Alpha 通道,您可以使用 Alpha 通道相应地保存图像。您还可以从 Alpha 通道生成掩码(在 OpenCV 中,掩码是二进制值,分别为 0 和 255)。

大多数 OpenCV 操作都适用于 4 通道图像,但它们不会特殊处理 alpha 通道或从中获取任何信息。

【讨论】:

    【解决方案2】:

    cv.loadImage() 用于 MultiCameraCalibration。对单个图像使用 cv.imread()。要获得透明度,您必须使用 cv.IMREAD_UNCHANGED 的标志

    这里是如何在 Python/OpenCV 中做到这一点。请注意,使用 cv.imshow 您将看不到透明度。它将是黑色的。要进行进一步分析,您应该将 Alpha 通道提取为蒙版,并将其用于您想做的任何事情,以限制对鞋子的处理,而不是鞋子周围的背景。

    import cv2
    
    # load image with alpha channel
    img = cv2.imread('shoe.png', cv2.IMREAD_UNCHANGED)
    
    # get mask from alpha channel
    mask = img[:,:,3]
    
    # view images
    # NOTE: imshow does not show transparency. It will be black there.
    cv2.imshow('img', img)
    cv2.imshow('mask', mask)
    cv2.waitKey(0)
    cv2.destroyAllWindows()
    
    # Saving the image does contain transparency as can be seen when viewed with some external viewer.
    cv2.imwrite('shoe_copy.png', img)
    

    【讨论】:

    • 如果我想以某种方式看到透明度不是黑色的怎么办?有没有办法做到这一点?
    • OpenCV 显示不显示透明度。它仅显示为黑色,除非您通过使用蒙版对其进行着色并关闭透明度使这些位置的图像不是黑色。
    猜你喜欢
    • 1970-01-01
    • 2018-05-17
    • 1970-01-01
    • 2020-05-20
    • 2011-08-05
    • 2010-09-07
    • 2017-03-01
    • 1970-01-01
    相关资源
    最近更新 更多