吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 460|回复: 2
收起左侧

[求助] 有没有大佬指点一下 opencv2 展示图片异常

[复制链接]
lengong 发表于 2024-1-26 20:15
原图

opencv2 读取后展示的图片

python代码
[Python] 纯文本查看 复制代码
import cv2
img = cv2.imread("./xx.png",-1)
cv2.imshow("img", img)
cv2.waitKey(0)
cv2.destroyAllWindows()


data.png

原图

原图

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

~零度 发表于 2024-1-27 00:02
本帖最后由 ~零度 于 2024-1-27 09:18 编辑

opencv显示的图像是正确的,原图是存在透明色的,有一些软件会把透明色显示为白色,所以原图看起来是白色背景,有一些软件会把透明色显示为黑色,所以opencv显示出来是黑色背景的。想要让它显示为白色,需要将原图中的透明像素替换为白色像素。具体操作如下:

[Asm] 纯文本查看 复制代码
import cv2
import numpy as np

# 读取PNG图片,包括透明通道
image = cv2.imread('xx.png', cv2.IMREAD_UNCHANGED)
# 判断图片的通道数,如果为小于4则没有透明度通道,如果为4则有透明度通道
if image.shape[2] == 4:
    alpha = image[:, :, 3] / 255.0  # 透明通道,值越小透明度越大
    background = np.ones(image.shape[:2], dtype=np.uint8) * 255 * (1 - alpha)  # 计算背景,透明部分像素值为0,不透明部分像素值为255
    image[:, :, 0] = background + image[:, :, 0] * alpha  # 背景和前景叠加
    image[:, :, 1] = background + image[:, :, 1] * alpha
    image[:, :, 2] = background + image[:, :, 2] * alpha
    image = image[:, :, :3].astype(np.uint8) # 去除透明通道,并转换数据类型
cv2.imshow("Image", image)
cv2.waitKey(0)
cv2.destroyAllWindows()


image.png

免费评分

参与人数 1吾爱币 +1 热心值 +1 收起 理由
lengong + 1 + 1 我很赞同!

查看全部评分

sai609 发表于 2024-1-27 08:57
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-24 15:19

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表