OpenCV:如何在图像上应用彩虹渐变图?

2023-11-24

假设我们有一个通过 openCV 以某种方式修改的图像:

enter image description here

现在我们很乐意申请它渐变贴图(就像我们可以通过 Photoshop 应用的那样):

enter image description here

所以我想知道如何通过 openCV 应用渐变图(彩虹色)?


这是一种使用 Python 创建假/伪彩色图像的方法,转换为 C++ 应该非常简单。概述:

  1. 以灰度和 RGB 格式打开图像
  2. 将 RGB 图像转换为 HSV(色调、饱和度、值/亮度)颜色空间。这是一个圆柱形空间,色调由极轴上的单个值表示。
  3. 将色调通道设置为我们已经打开的灰度图像,这是关键的一步。
  4. 将值和饱和通道均设置为最大值。
  5. 转换回RGB空间(否则显示不正确)。

不过,有几个问题......

  1. 由于色调以度为单位,并且色谱表示从 0 到 180(不是 0-256 也不是 0-360(有时是这种情况)),因此我们需要通过乘以适当地重新缩放灰度图像180 / 256.0
  2. 在 opencv 的情况下,色调色阶从蓝色开始(而不是红色,如图所示)。 IE。映射是这样的:

from: enter image description here to: enter image description here

如果改变这一点很重要,我们可以通过偏移所有色调元素并将它们包裹在 180 左右(否则会饱和)来实现。该代码通过在该截止点屏蔽图像然后适当偏移来实现此目的。使用 120 的偏移量生成色阶:

from: enter image description here to: enter image description here

并且以这种方式处理的图像似乎与您的图像非常匹配(最后)。

import cv

image_bw = cv.LoadImage("TfBmw.jpg", cv.CV_LOAD_IMAGE_GRAYSCALE)
image_rgb = cv.LoadImage("TfBmw.jpg")

#create the image arrays we require for the processing
hue=cv.CreateImage((image_rgb.width,image_rgb.height), cv.IPL_DEPTH_8U, 1)
sat=cv.CreateImage((image_rgb.width,image_rgb.height), cv.IPL_DEPTH_8U, 1)
val=cv.CreateImage((image_rgb.width,image_rgb.height), cv.IPL_DEPTH_8U, 1)
mask_1=cv.CreateImage((image_rgb.width,image_rgb.height), cv.IPL_DEPTH_8U, 1)
mask_2=cv.CreateImage((image_rgb.width,image_rgb.height), cv.IPL_DEPTH_8U, 1)

#convert to cylindrical HSV color space
cv.CvtColor(image_rgb,image_rgb,cv.CV_RGB2HSV)
#split image into component channels
cv.Split(image_rgb,hue,sat,val,None)
#rescale image_bw to degrees
cv.ConvertScale(image_bw, image_bw, 180 / 256.0)
#set the hue channel to the greyscale image
cv.Copy(image_bw,hue)
#set sat and val to maximum
cv.Set(sat, 255)
cv.Set(val, 255)

#adjust the pseudo color scaling offset, 120 matches the image you displayed
offset=120
cv.CmpS(hue,180-offset, mask_1, cv.CV_CMP_GE)
cv.CmpS(hue,180-offset, mask_2, cv.CV_CMP_LT)
cv.AddS(hue,offset-180,hue,mask_1)
cv.AddS(hue,offset,hue,mask_2)

#merge the channels back
cv.Merge(hue,sat,val,None,image_rgb)
#convert back to RGB color space, for correct display
cv.CvtColor(image_rgb,image_rgb,cv.CV_HSV2RGB)

cv.ShowImage('image', image_rgb)
# cv.SaveImage('TfBmw_120.jpg',image_rgb)
cv.WaitKey(0)

您的图像经过处理offset = 120:

enter image description here

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

OpenCV:如何在图像上应用彩虹渐变图? 的相关文章

  • WPF DataGrid 多选

    我读过几篇关于这个主题的文章 但很多都是来自 VS 或框架的早期版本 我想做的是从 dataGrid 中选择多行并将这些行返回到绑定的可观察集合中 我尝试创建一个属性 类型 并将其添加到可观察集合中 它适用于单个记录 但代码永远不会触发多个
  • 在模板类中声明模板友元类时出现编译器错误

    我一直在尝试实现我自己的链表类以用于教学目的 我在迭代器声明中指定了 List 类作为友元 但它似乎无法编译 这些是我使用过的 3 个类的接口 Node h define null Node
  • 在 xaml 中编写嵌套类型时出现设计时错误

    我创建了一个用户控件 它接受枚举类型并将该枚举的值分配给该用户控件中的 ComboBox 控件 很简单 我在数据模板中使用此用户控件 当出现嵌套类型时 问题就来了 我使用这个符号来指定 EnumType x Type myNamespace
  • 类型中的属性名称必须是唯一的

    我正在使用 Entity Framework 5 并且有以下实体 public class User public Int32 Id get set public String Username get set public virtual
  • 机器Epsilon精度差异

    我正在尝试计算 C 中双精度数和浮点数的机器 epsilon 值 作为学校作业的一部分 我在 Windows 7 64 位中使用 Cygwin 代码如下 include
  • 如何连接重叠的圆圈?

    我想在视觉上连接两个重叠的圆圈 以便 becomes 我已经有部分圆的方法 但现在我需要知道每个圆的重叠角度有多大 但我不知道该怎么做 有人有主意吗 Phi ArcTan Sqrt 4 R 2 d 2 d HTH Edit 对于两个不同的半
  • 如何使从 C# 调用的 C(P/invoke)代码“线程安全”

    我有一些简单的 C 代码 它使用单个全局变量 显然这不是线程安全的 所以当我使用 P invoke 从 C 中的多个线程调用它时 事情就搞砸了 如何为每个线程单独导入此函数 或使其线程安全 我尝试声明变量 declspec thread 但
  • 需要帮助优化算法 - 两百万以下所有素数的总和

    我正在尝试做一个欧拉计划 http projecteuler net问题 我正在寻找 2 000 000 以下所有素数的总和 这就是我所拥有的 int main int argc char argv unsigned long int su
  • C# 列表通用扩展方法与非通用扩展方法

    这是一个简单的问题 我希望 集合类中有通用和非通用方法 例如List
  • 为什么这个字符串用AesCryptoServiceProvider第二次解密时不相等?

    我在 C VS2012 NET 4 5 中的文本加密和解密方面遇到问题 具体来说 当我加密并随后解密字符串时 输出与输入不同 然而 奇怪的是 如果我复制加密的输出并将其硬编码为字符串文字 解密就会起作用 以下代码示例说明了该问题 我究竟做错
  • 如何定义一个可结构化绑定的对象的概念?

    我想定义一个concept可以检测类型是否T can be 结构化绑定 or not template
  • LINQ:使用 INNER JOIN、Group 和 SUM

    我正在尝试使用 LINQ 执行以下 SQL 最接近的是执行交叉联接和总和计算 我知道必须有更好的方法来编写它 所以我向堆栈团队寻求帮助 SELECT T1 Column1 T1 Column2 SUM T3 Column1 AS Amoun
  • C# 动态/expando 对象的深度/嵌套/递归合并

    我需要在 C 中 合并 2 个动态对象 我在 stackexchange 上找到的所有内容仅涵盖非递归合并 但我正在寻找能够进行递归或深度合并的东西 非常类似于jQuery 的 extend obj1 obj2 http api jquer
  • 复制目录下所有文件

    如何将一个目录中的所有内容复制到另一个目录而不循环遍历每个文件 你不能 两者都不Directory http msdn microsoft com en us library system io directory aspx nor Dir
  • 如何在 Linq to SQL 中使用distinct 和 group by

    我正在尝试将以下 sql 转换为 Linq 2 SQL select groupId count distinct userId from processroundissueinstance group by groupId 这是我的代码
  • 使用特定参数从 SQL 数据库填充组合框

    我在使用参数从 sql server 获取特定值时遇到问题 任何人都可以解释一下为什么它在 winfom 上工作但在 wpf 上不起作用以及我如何修复它 我的代码 private void UpdateItems COMBOBOX1 Ite
  • 当文件流没有新数据时如何防止fgets阻塞

    我有一个popen 执行的函数tail f sometextfile 只要文件流中有数据显然我就可以通过fgets 现在 如果没有新数据来自尾部 fgets 挂起 我试过ferror and feof 无济于事 我怎样才能确定fgets 当
  • C# 中最小化字符串长度

    我想减少字符串的长度 喜欢 这串 string foo Lorem ipsum dolor sit amet consectetur adipiscing elit Aenean in vehicula nulla Phasellus li
  • C++ 中的参考文献

    我偶尔会在 StackOverflow 上看到代码 询问一些涉及函数的重载歧义 例如 void foo int param 我的问题是 为什么会出现这种情况 或者更确切地说 你什么时候会有 对参考的参考 这与普通的旧参考有何不同 我从未在现
  • MySQL Connector C/C API - 使用特殊字符进行查询

    我是一个 C 程序 我有一个接受域名参数的函数 void db domains query char name 使用 mysql query 我测试数据库中是否存在域名 如果不是这种情况 我插入新域名 char query 400 spri

随机推荐

  • 熊猫合并df错误

    我有 3 个数据框正在尝试合并到 pandas 中 一个有 20 列 另外两个各有 2 列 它们的组织方式如下 eth price head n 3 Out 6 time eth price 0 8 28 17 16 19 344 021
  • 区分两个数组中的额外元素?

    我的一位朋友在接受采访时被问到这个问题 您已给出两个整数数组 每个数组的大小为 10 两者都包含 9 个相等的元素 比如 1 到 9 只有一个元素不同 你将如何找到不同的元素 您可以采取哪些不同的方法 一种简单但冗长的方法是 对两个数组进行
  • 创建 clickonce webdeploy 包

    是否可以构建一个包含可使用标准 webdeploy 工具部署到 Web 服务器的 clickonce 应用程序的 Web 部署包 这是理想的过程 MSBuild YourFullyQualifiedProjectName csproj vb
  • 美丽的汤和 Unicode 问题

    我正在使用 BeautifulSoup 来解析一些网页 有时我会遇到如下 unicode hell 错误 在 TheAtlantic com 上查看这篇文章的来源 http www theatlantic com education arc
  • WPF Converter 转换导致 Visual Studio 设计器异常

    如下所示的转换器将导致 2008 Visual Studio 设计器不显示 xaml 并错误显示 指定的转换无效 例外 public class ItemsVisibilityToGridColumnWidthConverter IMult
  • 无法手动关闭 matplotlib 绘图窗口

    我在 Mac OS X Yosemite 上运行 Python v2 7 和 matplotlib v1 5 0 直到最近 我能够在交互式解释器中运行脚本 显示绘图 然后手动终止窗口 例如 import numpy as np x np a
  • 如何安装libpython2.7.so

    我已经安装了Python 2 6 6 17 50 21 email protected which python usr local bin python 还有 Python 2 7 6 位于 17 51 12 email protecte
  • 享元模式中描述的内在状态和外在状态有什么区别?

    从本章开始FlyWeight内部图案四人帮FlyWeight模式适用当大多数对象状态可以成为外在的时候 什么是extrinsic state意思是 我感觉这个模式是用来共享对象的 如果要共享对象 那么该对象怎么可能有任何状态呢 让我们以文字
  • 如何更改角度材料排序图标

    我需要将默认箭头图标从角度材质 matSort 更改为自定义箭头 当前代码
  • C#:对象变量应该分配为 null 吗?

    在C 中 是否需要将一个对象变量赋值给null如果您已经使用完它 即使它超出了范围 不 这实际上可能是危险的并且容易出现错误 考虑一下有人可能稍后尝试使用它 但没有意识到它已被设置为空的可能性 仅当有合理理由将某些内容设置为 null 时
  • MS Access VBA 替换密码加密/解密

    谁能建议我如何实现替代密码风格 VBA中的加密和解密函数 我很欣赏散列被认为是更好的方法 但我需要可逆加密 非常感谢 您可以使用Blowfish 有一个可在 Access 中运行的 Visual Basic 6 版本 可在此处获取 http
  • 是否有函数可以获取区域设置字符串格式的 UTC 日期?

    我想在 JavaScript 中获取当前 UTC 日期 但以本地日期格式显示它 例如Date toLocaleDateString does 我首先尝试获取当前 UTC 日期Date toUTCString 但这实际上并没有以本地格式打印出
  • 奇怪的函数语法

    我看到一个奇怪的函数 看起来像这样 const x a gt b gt a b console log x 1 2 输出是 3 我知道它是一个返回函数的函数 并且 a 和 b 都在同一范围内 但我的问题是 这怎么能用在现实生活中呢 不使用带
  • 初学者如何使用常量内存(Cuda C)

    我有 3 个常数值 A B C 我想将其保存在常量内存中 我通过输入以下代码行找到了一种方法 CUDA global constants constant int A constant int B constant int C int ma
  • 当基类被淘汰时,单元测试会如何变化?

    这在一定程度上是后续行动这个问题 我不确定问这个问题的最佳方式 所以我会尝试一个小故事来设置场景 曾几何时 有一个类 A 它有一个单元测试类 ATests 负责通过公共接口测试其行为 他们幸福地在一起生活了一段时间 然后发生了变化 出现了
  • AutoFixture IEnumerable 与 CreateMany() 的行为

    看帖子的时候here 看起来我应该能够使用创建多个对象CreateMany 使用迭代它们foreach 然后将它们作为数组返回 我看到的是 每次迭代似乎每次都会创建新对象 这是预期的行为吗 要创建的实体 public class TestE
  • 如何使用 Dart 从不同的 URL 提供静态文件?

    有了 Dart 我就得到了awesome html 但我希望它是 awesome 这纯粹是一个 htaccess 我正在使用 Apache 或者有没有办法通过 Dart 或 现代 Web 开发 方式来解决这个问题 This htaccess
  • 将链接插入 MatSnackBar

    是否可以在 Angular Material 2 中插入链接MatSnackBarModule 我尝试在文本中执行此操作 但它将 html 显示为文本 const text a login a this snackBar open text
  • Google adsense 响应服务器响应状态为 400 ()

    我第一次在我的网站上实施 google adsensemyPleaks 在这里我面临下面提到的错误 Failed to load resource the server responded with a status of 400 谁能帮我
  • OpenCV:如何在图像上应用彩虹渐变图?

    假设我们有一个通过 openCV 以某种方式修改的图像 现在我们很乐意申请它渐变贴图 就像我们可以通过 Photoshop 应用的那样 所以我想知道如何通过 openCV 应用渐变图 彩虹色 这是一种使用 Python 创建假 伪彩色图像的