如何在opencv中使某些像素透明?

2024-02-19

我用 for 语句检查了每个像素的亮度,并尝试在亮度超过 100 时使其透明。 但隐形是行不通的。

看代码,image_al[x,y]的第四个是alpha。我应该怎么办? (如果你使用 bgr 的值而不是透明度,它就会改变。)


image = cv2.imread('cat.jpg', cv2.IMREAD_COLOR)

image_al=cv2.cvtColor(image,cv2.COLOR_BGR2BGRA)
image_hsv=cv2.cvtColor(image,cv2.COLOR_BGR2HSV)
for x in range(image_al.shape[0]):
    for y in range(image_al.shape[1]):
        px=image_hsv[x,y]
        print(px)
        if px[2]>100:
            px=image_al[x,y]
            image_al[x, y]=[px[0],px[1],px[2],255] #image_al[x, y]=[b,g,r,alpha]
cv2.imshow('image2',image_al)
cv2.waitKey(0)

开发环境:PyCharm、Windows


尽量避免for在 Python 中处理图像时会出现循环 - 它们非常慢、效率低且难以阅读。 Numpy 和 OpenCV 是矢量化的 - 它们以优化的方式处理整个图像C并且速度很快。

因此,您可以转换为 HSV 并提取 V 通道,然后简单地对其进行阈值并将其合并为 alpha 层:

import cv2
import numpy as np

# Load Image
im = cv2.imread('temple.jpg')

# Convert to HSV and take V channel
V = cv2.cvtColor(im,cv2.COLOR_BGR2HSV)[...,2]

# Threshold V channel at 100 to make alpha channel (A)
_, A = cv2.threshold(V,100,255,cv2.THRESH_BINARY)

# Stack A channel onto RGB channels
result = np.dstack((im,A))

# Save result
cv2.imwrite('result.png',result)

Photo https://en.wikipedia.org/wiki/Ta_Prohm#/media/File:Angkor_SiemReap_Cambodia_Tha-Prom-Temple-01.jpg作者:CEphoto,Uwe Aranas 或 © CEphoto,Uwe Aranas 抄送-SA 3.0

Result

如果您希望明亮的像素透明,请更改为:

_, A = cv2.threshold(V,100,255,cv2.THRESH_BINARY_INV) 

那么结果将是:

Keywords:Python、图像处理、HSV、色相饱和度和值、添加 alpha 通道、合并 alpha 通道、创建 alpha 通道、OpenCV

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在opencv中使某些像素透明? 的相关文章

随机推荐

  • 基于名称的下一个和上一个 MySQL 行

    我有一张包含人员详细信息的表格 我想根据个人的姓氏创建一个下一个 上一个链接 由于人员不是按字母顺序添加的 因此无法根据 ID 选择下一行或上一行 这是一个很大的表 相关字段是 id name l 和 name f 我想按 name l 个
  • Delphi与C++ dll通信(参数)

    您好 我在将 DLL 集成到 Delphi 2007 应用程序中时遇到了一些问题 我怀疑我的调用参数有问题 目前我有两个问题 但我认为它们是相互关联的 1 首先调用 DLL 从 h 文件 extern C declspec dllexpor
  • 带有 dotnet pack 的软件包版本始终为 1.0.0

    TLDR 在哪里dotnet pack在为程序集创建 nuget 包时提取版本信息 我有一个库 我已将其从 NET 4 6 1 项目转换为 NET Core 项目project json 对于我在此期间的 CI 使用 TFS 2015 vn
  • 如何在 Rails 5.1 中运行无头浏览器系统测试?

    The Rails 5 1 系统测试文档 http guides rubyonrails org testing html implementing a system test有点稀疏 我无法获得执行 javascript 运行的无头测试
  • 如何防止 SSRS 报告中的正文自动调整大小

    我有一份报告 其中的页眉和页脚都设置为填充整个 A4 长度 当然减去边距 因为我有一些关于它们的最右侧和最左侧的信息 现在 在正文中 我有一个列表元素 它允许我将 tablix 报告和图表放在一起 正文的大小也适当 以保持在报告的页码限制内
  • 经过几次乘法**有溢出**之后,是否有可能得到一个数字的原始值?

    概括 有没有办法做到这一点 这就是我的意思 假设我有一个无符号整数数字 然后我将其相乘几次 并且出现溢出 这是预期的 那么是否可以 恢复 原来的值呢 详细信息 这全都是关于Rabin Karp 滚动哈希 http en wikipedia
  • ParseUI 本地化

    由于 ParseUI 是开源的 因此很容易发现所有标签都在 ParseUI strings 中本地化 如何告诉 xcode 在运行时不要使用 ParseUI strings 而使用 Localisable strings 我在我的项目中创建
  • 尝试使用 Java 中的 Gmail API 发送电子邮件时出错

    我想使用 Gmail API 而不是 JavaMail 发送电子邮件 我在论坛上读到了很多类似的主题 但仍然有一个问题 首先我读到了这个 https developers google com gmail api guides sendin
  • 如何在XML中编写具有多个命名空间的xsd文件?

    当我在 mec xsd 中定义 XML 模式时 它不适用于该元素 我该如何解决这个问题 谢谢
  • 在 Eclipse CDT 中创建一个新的 C++ 项目,设置与另一个项目相同

    是否有一种简单的方法来创建克隆现有项目设置的新 C 项目 在开发 C 时 我喜欢编写许多小测试和示例 但如果我的代码依赖于外部库 就像它们经常做的那样 我必须每次都从头开始设置包含 库 编译器设置等 有某种模板机制吗 我了解 C C 项目设
  • node.js oracledb 不插入也不更新

    节点 oracledb 版本 1 2 节点 v0 12 7 按预期选择工作 对于更新和插入 虽然我们得到 rowsAffected 1 但插入或更新不受影响 var oracledb require oracledb oracledb ge
  • 使用本地存储存储多个项目的复选框“已选中”

    我想将我的复选框保存到本地存储 但是我使用的这段代码对于多个复选框来说太麻烦了 有没有更好的方法来做到这一点 setStatus document getElementById LineOp setStatus onclick functi
  • 调用其他程序时Powershell变量扩展

    我在尝试使用解压缩文件时遇到一个小问题7za http 7 zip org download htmlPowershell 中的命令行实用程序 我设置了 zip source变量为 zip 文件的路径和 unzip destination到
  • 在 Vue.js 中使用异步/等待模式

    我想在我的新 Vue js 项目中使用 async await 模式 然而 在我第一次尝试后 它抛出了一个错误
  • TreeMap 是如何排序的

    如何TreeMap种类 举例来说 您有以下地图 TreeMap
  • 当互联网断开连接时,HttpClient PostAsync 不响应

    我有一个 xamarin 表单应用程序 该应用程序执行PostAsync调用将图像作为多部分内容上传 问题是在 iOS 设备中 当我在 PostAsync 调用期间关闭 wifi 移动数据时 HttpClient 不会进入 catch 块来
  • 如何从C#读取中文文本文件?

    如何使用 C 读取中文文本文件 我当前的代码无法显示正确的字符 try using StreamReader sr new StreamReader path System Text Encoding UTF8 This is an arb
  • 如何将JScrollPane布局设置为与JTable相同?

    Tabel1 setModel new DefaultTableModel x y JScrollPane pane new JScrollPane Tabel1 当我运行该程序时 滚动窗格看起来比表格大 如何使滚动窗格布局与表格相同 ho
  • Angular 4 - 获取输入值

    我想知道如何从角度 4 上的输入获取值 我查看了有关 Angular 的文档 并且带有关键事件的示例对我来说效果不太好 我找不到正确的示例如何做到这一点 所以请帮助我 问题 我尝试读取输入的值 然后将值提交到另一个组件 该组件会将值添加到选
  • 如何在opencv中使某些像素透明?

    我用 for 语句检查了每个像素的亮度 并尝试在亮度超过 100 时使其透明 但隐形是行不通的 看代码 image al x y 的第四个是alpha 我应该怎么办 如果你使用 bgr 的值而不是透明度 它就会改变 image cv2 im