当前位置: 首页 > news >正文

RGBA图片格式转换为RGB格式(解决convert转换的失真问题)

使用convert转换的问题

OpenCV 的 cv2.cvtColor(…, cv2.COLOR_BGRA2GRAY) 会直接忽略 Alpha 通道的含义,将它当作第四个颜色通道来处理。
转换公式如下:

gray = 0.114*255 + 0.587*0 + 0.299*029

也就是说,即使 Alpha 为 0(完全透明),它也会参与这个公式,导致原本透明区域的像素值被错误地计算成一个“伪灰度值”。

我们保留透明区域为白色背景,解决代码如下(我们此处是转为了灰度图)

import cv2
import numpy as np# 读取RGBA图像
rgba_img = cv2.imread("data\\aug_data\\augmented_masks\\a1_aug0.png", cv2.IMREAD_UNCHANGED)# 创建一个与原图相同大小的白色 BGR 图像
adjust_img = np.ones((rgba_img.shape[0], rgba_img.shape[1], 3), dtype=np.uint8) * 255# 遍历像素点并根据alpha通道进行条件替换
for i in range(rgba_img.shape[0]):for j in range(rgba_img.shape[1]):val = rgba_img[i, j]  # val 是一个长度为4的数组if val[3] == 255:adjust_img[i, j] = val[:3]  # 复制 BGR 三通道
gray_mask = cv2.cvtColor(adjust_img, cv2.COLOR_BGR2RGB)
print(adjust_img.shape)
# 可选:显示或保存结果
cv2.imshow("Adjusted Image", gray_mask)
http://www.dtcms.com/a/283924.html

相关文章:

  • OpenCV中VideoCapture 设置和获取摄像头参数和Qt设计UI控制界面详解代码示例
  • (四)OpenCV——特征点检测与匹配
  • 分布式分片策略中,分片数量的评估与选择
  • MacOS安装linux虚拟机
  • GPU的barrier
  • OpenCV中常用特征提取算法(SURF、ORB、SIFT和AKAZE)用法示例(C++和Python)
  • Linux的Ext系列文件系统
  • 一文掌握Harbor的配额管理和GC机制
  • Kubernetes架构原理与集群环境部署
  • VMware Workstation Pro 17下载安装
  • C++ AVL树实现详解:平衡二叉搜索树的原理与代码实现
  • [yotroy.cool] 记一次 spring boot 项目宝塔面板部署踩坑
  • LeetCode|Day16|387. 字符串中的第一个唯一字符|Python刷题笔记
  • 高光谱相机(Hyperspectral Camera)
  • 虚拟内存管理-抖动和工作集
  • 告别手动报表开发!描述数据维度,AI 自动生成 SQL 查询 + Java 导出接口
  • Python暑期学习笔记3
  • 100201组件拆分_编辑器-react-仿低代码平台项目
  • 使用Proxy设计模式来增强类的功能:ToastProxy和DesktopToast的设计关系
  • suricata新增Mysql告警规则处理
  • 专业职业评估工具,多维度数据分析
  • 网络安全基础操作2
  • 第十四章 gin基础
  • Spring Boot 中 META-INF 的作用与功能详解
  • 荷塘水上闯关游戏:Python OpenGL 3D游戏开发实战详解
  • 简单实现一个接口限流
  • 逆向破解京东评论加密参数|Python动态Cookie解决方案
  • 基于 Electron + Vue 3 的桌面小说写作软件架构设计
  • 共用体(联合体)
  • React Native 基础tabBar和自定义tabBar - bottom-tabs