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

OpenCV Python 图像相加与透明色转换

将两幅图添加起来,构成一幅新的图像,并尝试将一个PNG的透明背景转换为特定的颜色。

生成纯背景

以下代码生成一个纯色背景JPG,颜色为照片底板的蓝(R:60 G:140 B:220)。在用OpenCV创建图像时,颜色按BGR

import cv2
import numpy as npdef create_blank(width, height, rgb_color=(60, 140, 220)):"""Create new image(numpy array) filled with certain color in RGB"""# Create black blank imageimage = np.zeros((height, width, 3), np.uint8)# Since OpenCV uses BGR, convert the color firstcolor = tuple(reversed(rgb_color))# Fill image with colorimage[:] = colorreturn imageimg = cv2.imread('dog.png')
(rows, cols) = img.shape[:2]
blank = create_blank(cols, rows)
cv2.imwrite('blue.jpg', blank)

蓝色背景

两个图像相加

两个图像大小相同的情况下,可以通过矩阵叠加方法——OpenCV Python中,为cv2.add,合并在一起,代码如下:

import cv2img1 = cv2.imread('dog.png')
img2 = cv2.imread('blue.jpg')# Add 2 images
img_dst = cv2.add(img1, img2)# Display the processed images 
cv2.imshow('img', img_dst )
cv2.imwrite('add.jpg', img_dst)# Wait for a key press and then close the windows
cv2.waitKey(0)
cv2.destroyAllWindows()

加法狗

显然,这是矩阵个元素数值的相加,那么,假如要把透明背景用别的颜色替换,而不是这样相加,又该“如何应对”?

透明色转换

读入一个有透明背景的png图片,然后我们会发现,它的α通道是0。

import cv2# Read a png with alpha channel
img = cv2.imread('dog.png', cv2.IMREAD_UNCHANGED)
cv2.imshow('img', img)
cv2.imwrite('dog.png', img)
# Wait for a key press and then close the windows
cv2.waitKey(0)
cv2.destroyAllWindows()

对于图像的透明部分,其值为[0,0,0,0],那么我们可以将该透明部分修改成对应的颜色,具体见函数transparent2bgra_color

import cv2
import numpy as npdef transparent2bgra_color(img, bgra_color=(255, 255, 255, 255)):# Avoid the side-effectres = img.copy()res[img[:, :, 3] == 0] = bgra_colorreturn res# Read the png image with alpha channel
origin_img = cv2.imread('dog.png', cv2.IMREAD_UNCHANGED)
dst_img = transparent2bgra_color(origin_img, bgra_color=(220, 140, 60, 255))
black_dog = transparent2bgra_color(origin_img, bgra_color=(0, 0, 0, 255))cv2.imshow('Origin', origin_img)
cv2.imshow('Converted', dst_img)
cv2.imshow('Black', black_dog)
cv2.imwrite('new_dog.png', dst_img)
cv2.imwrite('black_dog.png', black_dog)
# Wait for a key press and then close the windows
cv2.waitKey(0)
cv2.destroyAllWindows()

Origin:
原始图像
Converted:
转换后图像
Black:
黑色背景的狗狗

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • Day13--JavaWeb学习之Servlet后端渲染界面
  • 算法学习day28
  • VBA学习(22):动态显示日历
  • 网页UI设计工具全攻略:九大精选
  • 【初阶数据结构题目】9. 链表分割
  • JAVA(IO流)7.31
  • 声临其境!体验阿里云开源音频基座大模型——FunAudioLLM
  • 【LeetCode】33.搜索旋转排序数组
  • Vue学习(三)条件渲染、列表渲染
  • Linux--shell脚本语言—/—<1>
  • 【C++学习第19天】最小生成树(对应无向图)
  • 数据分析_01_Python基础
  • 【C++】一堆数组案例 元素逆置
  • 自定义线程池(二)
  • 【带你入门生信】什么是生物信息学
  • 【Leetcode】104. 二叉树的最大深度
  • 【RocksDB】TransactionDB源码分析
  • 2018天猫双11|这就是阿里云!不止有新技术,更有温暖的社会力量
  • 4个实用的微服务测试策略
  • Akka系列(七):Actor持久化之Akka persistence
  • bearychat的java client
  • CAP理论的例子讲解
  • HTTP传输编码增加了传输量,只为解决这一个问题 | 实用 HTTP
  • java中具有继承关系的类及其对象初始化顺序
  • oldjun 检测网站的经验
  • Vue实战(四)登录/注册页的实现
  • Webpack 4x 之路 ( 四 )
  • yii2中session跨域名的问题
  • 分享自己折腾多时的一套 vue 组件 --we-vue
  • 前端面试总结(at, md)
  • 如何设计一个比特币钱包服务
  • 入职第二天:使用koa搭建node server是种怎样的体验
  • 设计模式(12)迭代器模式(讲解+应用)
  • 从如何停掉 Promise 链说起
  • 正则表达式-基础知识Review
  • ​埃文科技受邀出席2024 “数据要素×”生态大会​
  • (2)(2.10) LTM telemetry
  • (3)选择元素——(17)练习(Exercises)
  • (BAT向)Java岗常问高频面试汇总:MyBatis 微服务 Spring 分布式 MySQL等(1)
  • (delphi11最新学习资料) Object Pascal 学习笔记---第7章第3节(封装和窗体)
  • (六)什么是Vite——热更新时vite、webpack做了什么
  • (十六)Flask之蓝图
  • (四)stm32之通信协议
  • (学习总结16)C++模版2
  • (转)AS3正则:元子符,元序列,标志,数量表达符
  • .NET Windows:删除文件夹后立即判断,有可能依然存在
  • .NET 中的轻量级线程安全
  • .net 重复调用webservice_Java RMI 远程调用详解,优劣势说明
  • .net实现客户区延伸至至非客户区
  • @antv/g6 业务场景:流程图
  • @for /l %i in (1,1,10) do md %i 批处理自动建立目录
  • [2016.7.test1] T2 偷天换日 [codevs 1163 访问艺术馆(类似)]
  • [2018][note]用于超快偏振开关和动态光束分裂的all-optical有源THz超表——
  • [3D基础]理解计算机3D图形学中的坐标系变换
  • [AIGC] MySQL存储引擎详解