• 首页 首页 icon
  • 工具库 工具库 icon
    • IP查询 IP查询 icon
  • 内容库 内容库 icon
    • 快讯库 快讯库 icon
    • 精品库 精品库 icon
    • 问答库 问答库 icon
  • 更多 更多 icon
    • 服务条款 服务条款 icon

opencv读写png

武飞扬头像
HackerTom
帮助1

[1] 测试了怎么手动加 alpha 通道设置透明度后,用 PIL.Image 存 png,通道顺序是 RGBA。这里测试用 opencv 读、写 3、4 通道的 png。

png 可以只存 3 通道的,即不要 alpha,也可以加上 alpha。而无 alpha 时 opencv 的通道顺序是 BGR,那加上 alpha 之后呢?

Test

import numpy as np
import cv2

# 写
bgr = np.zeros((28, 256, 3), dtype=np.uint8)
bgr[:, :, 0] = 255 # blue
cv2.imwrite("blue.png", bgr) # 3 通道,BGR
a = np.zeros((28, 256, 1), dtype=np.uint8) # alpha 通道
for i in range(256): # 渐变透明度
    a[:, i] = i
bgra = np.concatenate((bgr, a), axis=2) # BGRA 顺序
print(bgra.shape) # (28, 256, 4)
cv2.imwrite("blue_bgra.png", bgra) # 4 通道,BGRA

# 读
bgr_in = cv2.imread("blue.png") # 3 通道普通读
bgra_in = cv2.imread("blue_bgra.png") # 4 通道普通读
bgra_in2 = cv2.imread("blue_bgra.png", cv2.IMREAD_UNCHANGED) # 4 通道特殊操作
print(bgr_in.shape, bgra_in.shape, bgra_in2.shape) # (28, 256, 3) (28, 256, 3) (28, 256, 4)

# 对拍
print("diff bgr:", (bgr != bgr_in).sum()) # 0
print("diff bgr v.s. bgra_in:", (bgr != bgra_in).sum()) # 0
print("diff bgra:", (bgra != bgra_in2).sum()) # 0
学新通

output image

  • blue.png
    学新通
  • blue_bgra.png

学新通

conclusion

  • 不加 alpha 就还是 opencv 的 BGR 顺序,加了之后就是简单地变成 BGRA。
  • 3、4 通道 png 写都是一样的,用带特殊参数。
  • 读 3 通道 png 普通读就好,4 通道如果普通读就是简单舍弃 alpha,要保留 alpha 就加 cv2.IMREAD_UNCHANGED

References

  1. python设置图像透明度
  2. How to save png images with OpenCV
  3. How to load png images with 4 channels?

这篇好文章是转载于:学新通技术网

  • 版权申明: 本站部分内容来自互联网,仅供学习及演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,请提供相关证据及您的身份证明,我们将在收到邮件后48小时内删除。
  • 本站站名: 学新通技术网
  • 本文地址: /boutique/detail/tanhfjjiaj
系列文章
更多 icon
同类精品
更多 icon
继续加载