两种图像透明背景转特定颜色方法的比较

之前写过一篇博客,关于透明背景转换为特定颜色,当时使用了NumPy数组采用布尔索引转换的方式,这次我们把这种转换和常规的逐像素转换的方式进行比较,看那种方法效率更高。记得以前使用Matlab的时候,显然是矩阵布尔索引的方式会有更高的效率,不知道Python是否也一样。

1. 代码实现:

def transparent2bgra_color1(img, bgra_color=(255, 255, 255, 255)):"""将图像中的透明区域替换为指定的BGRA颜色。参数:img: 输入的BGRA格式图像,其中A通道为透明度。bgra_color: 替换透明区域的颜色,默认为白色(255, 255, 255, 255)。返回:返回替换透明区域后的图像。"""# 为了避免原图像发生改变,创建一个副本进行操作res = img.copy()# 将图像中透明度为0的区域替换为指定的BGRA颜色res[img[:, :, 3] == 0] = bgra_colorreturn resdef transparent2bgra_color2(src, bgra_color=(255, 255, 255, 255)):"""将图片中的透明部分替换为指定的BGRA颜色。参数:src: 输入的图片,应为BGRA格式。bgra_color: 替换透明部分的颜色,默认为白色(255, 255, 255, 255)。返回:替换透明部分后的图片。"""# 复制输入图片,避免修改原图img=src.copy()# 获取图片的宽度和高度sp=img.shape  width=sp[0]  height=sp[1]  # 遍历图片的每个像素点for yh in range(height):for xw in range(width):# 获取当前点的颜色数据color_d=img[xw,yh]  # 检查当前点的透明度,如果完全透明,则替换颜色if(color_d[3]==0):  img[xw,yh]=bgra_color  # 返回处理后的图片return img

2. 效率对比测试

使用Benchmark,我们可以测试这两种方法的性能,代码如下:

import pytest
import cv2def transparent2bgra_color1(img, bgra_color=(255, 255, 255, 255)):"""将图像中的透明区域替换为指定的BGRA颜色。参数:img: 输入的BGRA格式图像,其中A通道为透明度。bgra_color: 替换透明区域的颜色,默认为白色(255, 255, 255, 255)。返回:返回替换透明区域后的图像。"""# 为了避免原图像发生改变,创建一个副本进行操作res = img.copy()# 将图像中透明度为0的区域替换为指定的BGRA颜色res[img[:, :, 3] == 0] = bgra_colorreturn resdef transparent2bgra_color2(src, bgra_color=(255, 255, 255, 255)):"""将图片中的透明部分替换为指定的BGRA颜色。参数:src: 输入的图片,应为BGRA格式。bgra_color: 替换透明部分的颜色,默认为白色(255, 255, 255, 255)。返回:替换透明部分后的图片。"""# 复制输入图片,避免修改原图img=src.copy()# 获取图片的宽度和高度sp=img.shape  width=sp[0]  height=sp[1]  # 遍历图片的每个像素点for yh in range(height):for xw in range(width):# 获取当前点的颜色数据color_d=img[xw,yh]  # 检查当前点的透明度,如果完全透明,则替换颜色if(color_d[3]==0):  img[xw,yh]=bgra_color  # 返回处理后的图片return imgimg = cv2.imread('dog.png', cv2.IMREAD_UNCHANGED)@pytest.mark.parametrize("input_data", [img])
def test_trans_color1(benchmark, input_data):res = benchmark(transparent2bgra_color1, input_data)assert (667, 1000, 4) == res.shape@pytest.mark.parametrize("input_data", [img])
def test_trans_color2(benchmark, input_data):res = benchmark(transparent2bgra_color2, input_data)assert (667, 1000, 4) == res.shape    

3. 结果

 显然,Python也与Matlab类似,在数组(包括矩阵)的运算当中,布尔索引的方式具有更高的执行效率。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/403849.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

基于SSM的体育馆预约管理系统---附源码84196

摘 要 体育馆作为一个重要的运动场所,需要进行预约管理以保证资源的合理利用和场馆秩序的维护。传统的人工预约管理方式存在效率低、容易出错等问题,因此,在互联网高速发展的当下,需要设计和实现一个基于SSM的体育馆预约管理系统&…

优思学院|六西格玛实施关键:如何整合定性与定量数据

在精益六西格玛的世界中,数据不仅是工具,更是推动变革和改进的关键力量。了解定性数据和定量数据的区别,可以为流程改进提供强大的见解和策略。 定性数据与定量数据的本质 首先,定性数据和定量数据是两种截然不同的概念。定性数据…

springboot+vue 初始

1.控制器 2.文件上传拦截器 #过滤规则 # 默认访问static下面的文件http://localhost:8009/4.jpeg, # 带上static-path-pattern/static/**后,http://localhost:8009/static/4.jpeg spring.mvc.static-path-pattern/static/**#静态资源位置 spring.web.res…

笔记分享: 香港中文大学CSCI5610高级数据结构——最邻近查询

文章目录 Approximate Nearest Neighbor Search \textbf{Approximate Nearest Neighbor Search} Approximate Nearest Neighbor Search 1. Doubling Dimension \textbf{1. Doubling Dimension} 1. Doubling Dimension 1.0. Intro \textbf{1.0. Intro} 1.0. Intro 1.1. Doubling…

webshell免杀--免杀入门

前言 欢迎来到我的博客 个人主页:北岭敲键盘的荒漠猫-CSDN博客 本文主要整理webshell免杀的一些基础思路 入门级,不是很深入,主要是整理相关概念 免杀对象 1.各类杀毒软件 类似360,火绒等,查杀己方webshell的软件。 2.各类流量…

Spring Boot和OCR构建车牌识别系统

​ 博客主页: 南来_北往 系列专栏:Spring Boot实战 OCR介绍 OCR(Optical Character Recognition)是光学字符识别技术的缩写,它能够将图像中的文本转换为机器可读和编辑的数字文本格式。这种技术广泛应用于数据输入、文档管理…

【名单】新一批DCMM贯标认证名单公布

​近日,DCMM官方平台发布通知公告,经对评估机构提交的380家企业贯标评估报告进行核查,均符合要求,现对名单进行公示,其中: 甲方受管理级(二级):276家 乙方受管理级(二级):96家 甲方…

LMDeploy 量化部署实践闯关任务

一、LMDeploy量化介绍 1.LMDeploy部署模型的优势 LMDeploy实现了高效的推理、可靠的量化、卓越的兼容性、便捷的服务以及有状态的推理。 相比于vllm具有领先的推理性能: LMDeploy也提供了大模型量化能力:主要包括KV Cache量化和模型权重量化。 LMDepl…

【python】python代码打包工具cx_Freeze的介绍、原理、用法及实战案例分析

✨✨ 欢迎大家来到景天科技苑✨✨ 🎈🎈 养成好习惯,先赞后看哦~🎈🎈 🏆 作者简介:景天科技苑 🏆《头衔》:大厂架构师,华为云开发者社区专家博主,…

AI工作流:低代码时代的革新者,重塑手机问答类应用生态

在这个数字化迅猛发展的时代,低代码技术正以惊人的速度改变着我们的生活方式。作为低代码人群的先锋,AI工作流技术正在以前所未有的方式,赋予非技术人群实现梦想的能力 🔥能用AI-低代码传送门:https://www.nyai.chat …

1. windows搭建Kafka教程

目录 1. 部署zookeeper 1.1 下载地址 1.3 修改zoo配置 1.4 启动zookeepe服务 02 部署kafka 2.1 下载组件包 2.2 解压安装包 2.3 修改配置 2.4 启动kafka服务端 1. 部署zookeeper 1.1 下载地址 下载地址: kafka/zookeeper 下载地址 (qq.com) 1.2 解压 (…

JS模块化总结 | CommonJS、ES6

BV13W42197jR 个人笔记 目录 JS模块化基础知识1. 概述1.1 什么是模块化1.2 为什么需要模块化? 2 模块化规范3 导入&导出4 CommonJS规范4.1 初步体验4.2 导出数据4.3 导入数据4.4 扩展理解4.5 浏览器端运行 5 ES6模块化规范5.1 初步体验5.2 Node中运行ES65.3 导出数据①分别…

一文掌握 Web 测试:功能、界面、兼容与安全的综合测试指南!

随着Web技术的不断演进,测试除了对应用的功能性、界面美观性、跨平台兼容性的基本要求外、安全性和性能的要求也逐步增高。因此,全面、系统的测试思维和策略成为了保证Web应用高质量的关键因素。本篇文章将从功能测试、界面测试、兼容性测试和安全测试四…

【数据结构】PTA 带头结点的链式表操作集 C语言

本题要求实现带头结点的链式表操作集。 函数接口定义: List MakeEmpty(); Position Find( List L, ElementType X ); bool Insert( List L, ElementType X, Position P ); bool Delete( List L, Position P ); 其中List结构定义如下: typedef struc…

Kotlin学习-01创建kotlin学习环境

安装idea https://www.jetbrains.com/zh-cn/ 创建项目 选择kotlin 修改Main.kt fun main() {print("Hello World!") }运行

APP支付宝授权获取code uniapp

1.点击使用plus.runtime跳转打开支付宝 //打开支付宝授权,在支付宝APP中授权后会在支付宝中跳转到你填写的h5地址//urls是授权地址可以后端拼接也可以前端写死 //以下是一个拼接示例,需修改app_id的值和redirect_uri的值即可 //app_id是商户的APPID&…

计算机网络系统速成

Http与Https Http与Https是两种重要的网络通信协议,它们在Web通信中扮演着关键角色。以下是对Http与Https的详细解析: 一、Http(超文本传输协议) 1. 定义与功能 定义:Http(HyperText Transfer Protocol…

Vue如何给计算属性computed传参的思考,看完就明白了!

一、缘起 事情的起因是这样的,有位朋友(无中生友)遇到了如下需求: 上面是一个商品列表,每个商品对应一个价格、优惠、数量,并且数量可以动态改变,最后动态计算出一个总价。当然,这只…

Ubuntu修改命令提示符格式PS1

命令提示符组成 通过Xshell进入Ubuntu的默认提示符是这样的 rootDESKTOP:~# root: 当前登录用户DESKTOP:主机名~: 当前目录名(即用户主目录)#:超级用户权限(root用户显示)$: 普通用户权限(非root用户显示) 修改命令提示符 step1…

nginx实战演练

目录 一.Nginx架构和安装&#xff08;未完待续&#xff09; <1>.Nginx概述 <2>.Nginx架构和进程 <3>.Nginx模块 <4>.Nginx安装(编译安装) 二.Nginx基础配置 <1>.关闭debug <2>.将nginx软件添加到环境变量 <3>.开机自启动脚…