【问题标题】:Read RGBA Image OpenCV读取 RGBA 图像 OpenCV
【发布时间】:2011-12-29 12:33:10
【问题描述】:

我一直在阅读、处理和显示 sample.png 图像 包含 RGB 和一个额外的 Alpha 层。 我已经手动删除了这张图片中的背景,只有前景出现在 windows 图像幻灯片程序。我找不到任何有用的信息 无论如何...当我从opencv usng函数读取它时,imread或cvloadimage 自己创建一个白色背景......我已经阅读了highgui的文档 其中指出这些功能仅处理 RGB 而不是 RGBA ......任何帮助或想法 会有帮助的...

谢谢 萨利赫...

【问题讨论】:

    标签: image-processing opencv uiimageview imagemagick computer-vision


    【解决方案1】:

    AFAIK 目前唯一的解决方案是将 Alpha 通道加载为单独的图像,然后将其连接在一起。您可以使用cvtColor() 将 alpha 通道添加到带有图像的 Mat 中,例如mixChannels() 将其与加载的 aplha 图像混合在一起。

    【讨论】:

    • 谢谢,但我怎样才能显示它...imshow 和 cvLoadImage 将把它当作 RGB ???
    • 对不起,我不认为有办法在 OpenCV 中显示 RGBA 图像......此外,您一次只能在一个窗口中显示一个图像。因此,您可能必须手动合并这些图像并显示结果。
    • 我解决了...没有必要加载单独的 alpha 层...您要删除的图像部分,将其着色为黑色...使用 opencv 函数照常阅读。 .. 使用 alpha 混合如下 cvAddWeighted(&sourceFrame,alpha,yourImage,beta,gamma,&DestinationFrame); alpha = 1 beta = 1 和 gamma = 0 您的图像的黑色部分将被删除,图像的其余部分将被 alphablend 到 sourceimage 并放置到目标图像...
    • 这最后一条评论应该是答案!
    • 使用此方法时,应谨慎选择背景颜色。使用蓝色 (r=0, g=0, b=255) 很常见,因为它在人体皮肤(人物照片等)中不存在。
    【解决方案2】:

    您可以使用带有 IMREAD_UNCHANGED 选项的 cv::imread() 将数据读取到 cv::Mat 结构中。如果您仍然需要使用 IplImage,可以从 cv::Mat 转换为 IplImage 而不会丢失 alpha 通道。

    【讨论】:

      猜你喜欢
      • 2010-12-04
      • 1970-01-01
      • 1970-01-01
      • 2020-12-05
      • 2015-05-27
      • 2015-01-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多