使用Python,OpenCV构建透明的叠加层

news/2024/6/30 15:30:58

为了构造透明的叠加层,需要准备两个图像:(1)原始图片;(2)要 “叠加”在第一个图像上的图像(包含某种级别的Alpha透明度)。

透明叠加层的用例几乎无穷无尽,其中俩个是:

  • 可以将运行时的重要信息直接覆盖在输出图像上,而不是在单独的窗口或终端中显示。使用透明的叠加层可以减少混淆输出图像内容的需要!
  • 使用Alpha透明度,将两个图像“融合”在一起。

使用cv2.addWeighted应用透明叠加层功能

cv2.addWeighted(overlay, alpha, output, 1 - alpha, 0, output)

  • –overlay: 我们要应用的叠加层图像
  • –cv2.addWeighted(overlay, alpha, output, 1 - alpha, 0, output)
  • –alpha: 叠加层的实际Alpha透明度,alpha越接近1,图像越不透明;alpha越接近0,叠加层显示得越透明;
  • –output: 原始图像
  • –beta: Beta定义为1-alpha 。我们需要定义alpha + beta = 1.0
  • gamma: 伽玛值-加到加权和的标量。可以将gamma视为应用加权加法后添加到输出图像的常数。将其设置为零,表示不需要应用恒定值的加法运算。
  • –output: 最终的结果,输出图像

效果图:
在这里插入图片描述

# USAGE
# python overlay.py# 导入必要的包
from __future__ import print_function
import numpy as np
import cv2
import imutils# 加载图像
image = cv2.imread("../image/flower4.jpg")
image = imutils.resize(image, width=600)
cv2.imshow("origin", image)
cv2.waitKey(0)# 循环遍历 [0,1.0] 的透明度
for alpha in np.arange(0, 1.1, 0.1)[::-1]:# 创建俩个原始图的拷贝# 一个用于构建叠加层 一个用于输出图像overlay = image.copy()output = image.copy()# 在左上角 添加文本: PyimageSerach:alpha# 在右下角画一个矩形的红色框cv2.rectangle(overlay, (150, 210), (500, 630),(0, 0, 255), -1)cv2.putText(overlay, "PyImageSearch: alpha={:.2f}".format(alpha),(10, 30), cv2.FONT_HERSHEY_SIMPLEX, 1.0, (0, 0, 255), 3)# 使用cv2.addWeighted应用透明叠加层功能# overlay: 我们要应用的叠加层图像# alpha:   叠加层的实际Alpha透明度,alpha越接近1,图像越不透明;alpha越接近0,叠加层显示得越透明;# output: 原始图像# beta:   我们提供beta值作为第四个参数。 Beta定义为1-alpha 。我们需要定义alpha和beta,以便alpha + beta = 1.0# gamma:  伽玛值-加到加权和的标量。您可以将gamma视为应用加权加法后添加到输出图像的常数。在这种情况下,我们将其设置为零,因为我们不需要应用恒定值的加法运算。# output: 输出图像cv2.addWeighted(overlay, alpha, output, 1 - alpha,0, output)# 展示输出图像,alpha,betaprint("alpha={:.2f}, beta={:.2f}".format(alpha, 1 - alpha))cv2.imshow("Output", output)cv2.waitKey(0)cv2.destroyAllWindows()

参考:

  • https://www.pyimagesearch.com/2016/03/07/transparent-overlays-with-opencv/

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈,一经查实,立即删除!

相关文章

ListView style

步骤一:在使用的ListView的activiey里使用android:theme“style/Theme的名字” 步骤二:创建Themes.xml 在Themes.xml里定义的使用的样式。如: 步骤三:在themes.xml使用了styles.xml定义的listView的属性,创…

使用Python,OpenCV线程化方式提高视频FPS(每秒帧数)

使用Python,OpenCV处理视频流时,获得更高FPS(Frams Per Second)的“秘密”是将I / O(即从摄像机传感器读取帧)交给线程去处理; 读取帧 I/O是阻塞型的,定义主线程处理读到的帧,一个新的线程一直读取帧,等主线程处理完,将新读取到的帧接过来继续处理; I/O 密集型的用…

小D学blend-----如何创建自定义的Tooltip控件

运行环境&#xff1a;blend 4.0或者blend 3.0 silverlight 3.0&#xff08;其实我相信步骤应该是差不多的&#xff09; 语言&#xff1a;C# Tooltip类:它是表示一个长方形的小弹出窗口&#xff0c;该窗口在用户将指针悬停在一个控件上时显示有关该控件用途的简短说明。<p&g…

一步一步实现自己的模拟控件(9)——消息处理

这次我们将要给Widget增加一些状态&#xff0c;并使其能够接受出消息处理扩展&#xff0c;测试工程中实现了一个按钮的消息处理扩展。 Widget状态&#xff1a; 之前的控件只是绘制了一个边框&#xff0c;并且总是会在窗口中显示。实际上我们往往会希望能够让某个控件显示或者隐…

ES集群状态、节点、索引等查看及根据字段、排序查询

ES集群基础&#xff1a; 1. 查看集群&#xff1a; http://172.xxx.xxx.8:92002. 查看状态&#xff1a; http://172.xxx.xxx.8:9200/_cat/health?v3. 查看索引&#xff1a; http://172.xxx.xxx.8:9200/_cat/indices?v4. 查看节点&#xff1a; http://172.xxx.xxx.8:9200/…

【点云空间索引】python-pcl:KdTree与八叉树

1. 点云是什么 通过雷达、激光扫描、立体摄像机等三维测量设备获得的点云数据&#xff0c;具有数据量大、分布不均匀等特点。 点云数据主要是表征目标表面的海量点集合&#xff0c;并不具备传统实体网格数据的几何拓扑信息。点云处理中最核心的问题就是建立离散点间的拓扑结构&…

【点云StatisticalOutlierFilter】python-pcl:去除离群点

点云去除离群点 方法&#xff1a;StatisticalOutlierFilter 原理&#xff1a;使用K近邻方法找到点云中每个点k近邻&#xff0c;计算出标准距离&#xff1b;设置俩个点之间距离超过标准距离*std倍数的为离群点。 结果&#xff1a;将点云分为俩部分&#xff0c;内点以及离群点…

Postgresql: 时间戳long,TimeStamp,Date,String互转

今天遇到一个神奇的问题&#xff1a;Postgre数据库里存的 10位long类型的时间戳&#xff0c;拿Java代码转完的日期年月日时分秒&#xff0c;转出来的时间和在pgAdmin里用sql转完的日期 整整差了8个小时。。。。。 你不信吗&#xff1f; 请看图 时间戳&#xff1a;1598619305 转…