numpy数组元素值的高效查表映射机制

2023-10-29

☞ ░ 前往老猿Python博文目录 https://blog.csdn.net/LaoYuanPython

一、背景

老猿最近在进行OpenCV直方图均衡学习,发现书中一个神奇的处理机制:通过图像img计算生成直方图,然后生成该直方图的CDF,然后根据CDF进行直方图均衡处理,得到原直方图灰度值到均衡后直方图灰度值的一个映射表CDFTable,该CDFTable是一个numpy的一维数组,共计256个元素,其中CDFTable[i]表明将原图像灰度值i映射为CDFTable[i],有了这个表之后,真正的图像映射只有一个语句:

img2 = cdf[img]

就这样简单一个语句,将img图像中所有灰度值按照映射关系进行了变换,得到了结果图像img2。

二、一个简单的例子

这个机制基于上面的介绍已经很清楚了,下面提供一个简单案例:

import numpy as np

def test():
    m = np.array([[[1,2,3],[1,2,3],[1,2,3]],[[4,5,6],[4,5,6],[4,5,6]],[[7,8,9],[7,8,9],[7,8,9]]],dtype=np.uint8)
    l = np.array([19,18,7,6,5,4,3,2,1,0])
    m2 = l[m]
    print(m2)
    
test()

输出结果:

[[[18  7  6]
  [18  7  6]
  [18  7  6]]

 [[ 5  4  3]
  [ 5  4  3]
  [ 5  4  3]]

 [[ 2  1  0]
  [ 2  1  0]
  [ 2  1  0]]]

三、小结

本文介绍了numpy数组元素值的高效查表映射机制,在使用该机制时,老猿总结有如下要点:

  1. 需要被映射的数组元素只能是有限的非负整数;
  2. 映射表中用于映射的数组的元素个数必须是被映射数组元素最大值对应个数+1个;
  3. 映射表被映射到的新值可以是任何值,包括字符串,如上例中的l可以是这样的数组:l = np.array(['9','a18.8','ll',6,5,4,3,2,1,0])
  4. 映射时,以:结果表 = 映射表[被映射表] 的形式使用。

四、问题

关于这个知识点,老猿在网上找了半天没有找到相关的介绍,连这种查表映射机制是否有其他名字都不知道。是否还有除以上介绍内容之外的其他方式的映射?不知道哪位大侠可以提供一下资料?或者还有更神奇的numpy使用方法?如果能答疑解惑,不胜感激。

关于图像直方图处理的内容请参考《《数字图像处理》第三章学习总结感悟2:直方图处理》的介绍。

更多图像处理请参考专栏OpenCV-Python图形图像处理》及《图像处理基础知识》的介绍。

对于缺乏Python基础的同仁,可以通过老猿的免费专栏《 专栏:Python基础教程目录》从零开始学习Python。

如对文章内容存在疑问,可在博客评论区留言,或关注:老猿Python 微信公号发消息咨询,可通过扫博客左边的二维码加微信公众号。

写博不易,敬请支持:

如果阅读本文于您有所获,敬请点赞、评论、收藏,谢谢大家的支持!

关于老猿的付费专栏

  1. 付费专栏《https://blog.csdn.net/laoyuanpython/category_9607725.html 使用PyQt开发图形界面Python应用》专门介绍基于Python的PyQt图形界面开发基础教程,对应文章目录为《 https://blog.csdn.net/LaoYuanPython/article/details/107580932 使用PyQt开发图形界面Python应用专栏目录》;
  2. 付费专栏《https://blog.csdn.net/laoyuanpython/category_10232926.html moviepy音视频开发专栏 )详细介绍moviepy音视频剪辑合成处理的类相关方法及使用相关方法进行相关剪辑合成场景的处理,对应文章目录为《https://blog.csdn.net/LaoYuanPython/article/details/107574583 moviepy音视频开发专栏文章目录》;
  3. 付费专栏《https://blog.csdn.net/laoyuanpython/category_10581071.html OpenCV-Python初学者疑难问题集》为《https://blog.csdn.net/laoyuanpython/category_9979286.html OpenCV-Python图形图像处理 》的伴生专栏,是笔者对OpenCV-Python图形图像处理学习中遇到的一些问题个人感悟的整合,相关资料基本上都是老猿反复研究的成果,有助于OpenCV-Python初学者比较深入地理解OpenCV,对应文章目录为《https://blog.csdn.net/LaoYuanPython/article/details/109713407 OpenCV-Python初学者疑难问题集专栏目录
  4. 付费专栏《https://blog.csdn.net/laoyuanpython/category_10762553.html Python爬虫入门 》站在一个互联网前端开发小白的角度介绍爬虫开发应知应会内容,包括爬虫入门的基础知识,以及爬取CSDN文章信息、博主信息、给文章点赞、评论等实战内容。

前两个专栏都适合有一定Python基础但无相关知识的小白读者学习,第三个专栏请大家结合《https://blog.csdn.net/laoyuanpython/category_9979286.html OpenCV-Python图形图像处理 》的学习使用。

对于缺乏Python基础的同仁,可以通过老猿的免费专栏《https://blog.csdn.net/laoyuanpython/category_9831699.html 专栏:Python基础教程目录)从零开始学习Python。

如果有兴趣也愿意支持老猿的读者,欢迎购买付费专栏。

老猿Python,跟老猿学Python!

☞ ░ 前往老猿Python博文目录 https://blog.csdn.net/LaoYuanPython

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

numpy数组元素值的高效查表映射机制 的相关文章

  • Python 的键盘中断不会中止 Rust 函数 (PyO3)

    我有一个使用 PyO3 用 Rust 编写的 Python 库 它涉及一些昂贵的计算 单个函数调用最多需要 10 分钟 从 Python 调用时如何中止执行 Ctrl C 好像只有执行结束后才会处理 所以本质上没什么用 最小可重现示例 Ca
  • Django 管理员在模型编辑时间歇性返回 404

    我们使用 Django Admin 来维护导出到我们的一些站点的一些数据 有时 当单击标准更改列表视图来获取模型编辑表单而不是路由到正确的页面时 我们会得到 Django 404 页面 模板 它是偶尔发生的 我们可以通过重新加载三次来重现它
  • SQLAlchemy 通过关联对象声明式多对多自连接

    我有一个用户表和一个朋友表 它将用户映射到其他用户 因为每个用户可以有很多朋友 这个关系显然是对称的 如果用户A是用户B的朋友 那么用户B也是用户A的朋友 我只存储这个关系一次 除了两个用户 ID 之外 Friends 表还有其他字段 因此
  • 为 Anaconda Python 安装 psycopg2

    我有 Anaconda Python 3 4 但是每当我运行旧代码时 我都会通过输入 source activate python2 切换到 Anaconda Python 2 7 我的问题是我为 Anaconda Python 3 4 安
  • 使用带有关键字参数的 map() 函数

    这是我尝试使用的循环map功能于 volume ids 1 2 3 4 5 ip 172 12 13 122 for volume id in volume ids my function volume id ip ip 我有办法做到这一点
  • Flask 会话变量

    我正在用 Flask 编写一个小型网络应用程序 当两个用户 在同一网络下 尝试使用应用程序时 我遇到会话变量问题 这是代码 import os from flask import Flask request render template
  • 如何在 Python 中检索 for 循环中的剩余项目?

    我有一个简单的 for 循环迭代项目列表 在某些时候 我知道它会破裂 我该如何退回剩余的物品 for i in a b c d e f g try some func i except return remaining items if s
  • PyUSB 1.0:NotImplementedError:此平台不支持或未实现操作

    我刚刚开始使用 pyusb 基本上我正在玩示例代码here https github com walac pyusb blob master docs tutorial rst 我使用的是 Windows 7 64 位 并从以下地址下载 z
  • Spark KMeans 无法处理大数据吗?

    KMeans 有几个参数training http spark apache org docs latest api python pyspark mllib html highlight kmeans pyspark mllib clus
  • 以编程方式停止Python脚本的执行? [复制]

    这个问题在这里已经有答案了 是否可以使用命令在任意行停止执行 python 脚本 Like some code quit quit at this point some more code that s not executed sys e
  • OpenCV 无法从 MacBook Pro iSight 捕获

    几天后 我无法再从 opencv 应用程序内部打开我的 iSight 相机 cap cv2 VideoCapture 0 返回 并且cap isOpened 回报true 然而 cap grab 刚刚返回false 有任何想法吗 示例代码
  • 添加不同形状的 numpy 数组

    我想添加两个不同形状的 numpy 数组 但不进行广播 而是将 缺失 值视为零 可能最简单的例子是 1 2 3 2 gt 3 2 3 or 1 2 3 2 1 gt 3 2 3 1 0 0 我事先不知道形状 我正在弄乱每个 np shape
  • Python 的“zip”内置函数的 Ruby 等价物是什么?

    Ruby 是否有与 Python 内置函数等效的东西zip功能 如果不是 做同样事情的简洁方法是什么 一些背景信息 当我试图找到一种干净的方法来进行涉及两个数组的检查时 出现了这个问题 如果我有zip 我可以写这样的东西 zip a b a
  • python获取上传/下载速度

    我想在我的计算机上监控上传和下载速度 一个名为 conky 的程序已经在 conky conf 中执行了以下操作 Connection quality alignr wireless link qual perc wlan0 downspe
  • 将图像分割成多个网格

    我使用下面的代码将图像分割成网格的 20 个相等的部分 import cv2 im cv2 imread apple jpg im cv2 resize im 1000 500 imgwidth im shape 0 imgheight i
  • 使用 Python 绘制 2D 核密度估计

    I would like to plot a 2D kernel density estimation I find the seaborn package very useful here However after searching
  • 基于 OpenCV 边缘的物体检测 C++

    我有一个应用程序 我必须检测场景中某些项目的存在 这些项目可以旋转并稍微缩放 更大或更小 我尝试过使用关键点检测器 但它们不够快且不够准确 因此 我决定首先使用 Canny 或更快的边缘检测算法 检测模板和搜索区域中的边缘 然后匹配边缘以查
  • 发送用户注册密码,django-allauth

    我在 django 应用程序上使用 django alluth 进行身份验证 注册 我需要创建一个自定义注册表单 其中只有一个字段 电子邮件 密码将在服务器上生成 这是我创建的表格 from django import forms from
  • 在 Qt 中自动调整标签文本大小 - 奇怪的行为

    在 Qt 中 我有一个复合小部件 它由排列在 QBoxLayouts 内的多个 QLabels 组成 当小部件调整大小时 我希望标签文本缩放以填充标签区域 并且我已经在 resizeEvent 中实现了文本大小的调整 这可行 但似乎发生了某
  • 从列表指向字典变量

    假设你有一个清单 a 3 4 1 我想用这些信息来指向字典 b 3 4 1 现在 我需要的是一个常规 看到该值后 在 b 的位置内读写一个值 我不喜欢复制变量 我想直接改变变量b的内容 假设b是一个嵌套字典 你可以这样做 reduce di

随机推荐

  • matplotlib(五)排版布局

    网格布局目录 subplots 最常见的网格排版方式 一次性定好所有Axes GridSpec 复杂网格排列 SubplotSpec 为给定GridSpec中子图指定位置 subplot2grid 类似于subplot 但使用基于0的索引并
  • 电源基础知识之——LDO 【十大】 关键参数

    简介 在每个产品电路系统设计中 电源 都是非常重要的部分 一个好的电源决定了电路能否稳定的工作 图1所示的为常见的DCDC电源的种类 本文会先带大家了解使用LDO必须掌握的重要参数 并以TI 的LM1117为来举例说明 图1 一 LDO的典
  • 同花顺(股市)爬虫

    爬取同花顺 http q 10jqka com cn 站点前20页股市数据并存储在xlsx文件 难度 中 逆向参数 hexin v gt gt 刷新一次会有有效次数 import copy import requests import pa
  • VisualVM连接远程主机

    一 在服务器上部署JMX服务 1 进入tomcat的bin目录 修改catalina sh文件 tomcat的bin目录 修改catalina sh vim catalina sh 添加如下配置 CATALINA OPTS CATALINA
  • 4项数据资产管理标准

    数据要素正在引发新的生产要素变革 重塑企业的生产方式和商业模式 利用好数据要素是驱动数字经济创新发展的重要抓手 数据资产管理是释放数据要素价值的基础 是数字经济的核心驱动力 企业体系化开展数据资产管理工作 可以提升数据资源化效率 创新数据资
  • 2核4G服务器支持多少人同时在线?并发数如何计算?

    2核4G服务器支持多少人同时在线 2核4G服务器最大并发数承载量如何计算 事实上 云服务器能够承载多少并发量与后端程序代码的优化有直接关系 2核4G服务器网分享2核4G服务器最大并发数同时在线人数 2核4G服务最大并发数说明 抛开应用谈并发
  • Python自动化测试框架:Pytest和Unittest的区别

    pytest和unittest是Python中常用的两种测试框架 它们都可以用来编写和执行测试用例 但两者在很多方面都有所不同 本文将从不同的角度来论述这些区别 以帮助大家更好地理解pytest和unittest 1 原理 pytest是基
  • 请求的资源不支持 http 方法“OPTIONS”

    实际项目中 对于WebApi的访问不一定都在同一域名下 所以进行跨域访问的时候 可能会出现如下提示 请求的资源不支持 http 方法 OPTIONS 需要对WebApi进行设置 1 修改Web config文件 在system webSer
  • 为初学者介绍轻量级目录访问协议——LDAP

    如果您是刚接触Active Directory AD 的初学者 那么当您发现LDAP这个术语时可能会感到十分迷茫 今天就让我们来您熟悉 LDAP 让您更加坚定学习AD域管理的信心 LDAP 首先 让我们直面主题 什么是 LDAP LDAP
  • pytorch对于CUDA的内存管理机制

    1 设备分配 torch cuda 用于设置和运行 CUDA 操作 它会跟踪当前选定的GPU 并且您分配的所有CUDA张量将默认在该设备上创建 所选设备可以使用 torch cuda device 环境管理器进行更改 一旦分配了张量 您就可
  • MySQL的Binlog原理

    什么是二进制日志 binlog binlog是记录所有数据库表结构变更 例如CREATE ALTER TABLE 以及表数据修改 INSERT UPDATE DELETE 的二进制日志 binlog不会记录SELECT和SHOW这类操作 因
  • GlitchFree的时钟切换技术(glitchless clock mux GLCM)

    0 下文给出了两种glitchFree的电路 第一种电路图包含了DFT的相关控制 且是3级上升沿的寄存器打拍 知乎NingHeChuan给出的是两级寄存器分别使用下沿和上沿触发的寄存器打拍 需要分析两种做法的优劣 1 项目中实际使用的 参考
  • js数组方法之改变或不改变原数组

    数组方法 改变原数组 push 将参数添加到数组尾部 返回添加后的数组的长度 pop 将参数从数组尾部删除 返回删除的元素值 如果数组的长度为0 则返回undefined unshift 将参数添加到数组头部 返回添加的数组的长度 shif
  • 麦克风灵敏度

    麦克风灵敏度 通常都是以负数形式呈现 比如 45db 47db 麦克风灵敏度为何是负数呢 db是一个无量纲单位 因此就有一个参考系 麦克风0db的定义是 在1pa声压下 麦克风输出1V电压时为0db 计算公式如下 Lm 20lgVm Vs
  • 关于Math类能不能被实例化

    Math作为java中很常见的类 关于它能不能被实例化 其实Math类是不能被实例化的 因为他的构造方法在写的时候是private的 public final class Math Don t let anyone instantiate
  • Linux设备驱动程序——read()、write()以及ioctl()

    前一段时间在调试一个字符设备驱动程序的过程中使用到了 ioctl 那时候只是简单的了解了一下 现在回头来看一个字符设备驱动代码的时候发现还是很有必要把这部分内容学习一下 同时把相关的read和write函数也相应的学习一下 read 函数
  • DVWA通关教程(上)

    DVWA之暴力破解 低级 中级 高级 宏 和音叉 1 低级 1 发送账户和错误密码 去burp把拦截到的内容发送到测试器 2 点击开始攻击 看回复的字节长度 确定账户密码 2 中级 1 发送账户和密码 去burp把拦截到的内容发送到测试器
  • F12进入调试界面总是停留在Paused in debugger解决办法

    有时候我们在某个界面点击F12后 页面会出现下面这样的按钮 导致无法对界面进行实时操作 我使用的是edge浏览器 解决办法如下 点击上面的禁止按钮 再点击一下页面上下面的按钮就可以了
  • 单电源运放的偏置电压

    运放的特点是输出幅值不能超过电源电压的压差 对于传统单电源运放 如LM358 输出电压幅值不能达到电源电压上下限 单电源运放工作时只能放大对地为正 同向输入 或为负 反向输入 的直流电压 若输入为对地的交流信号时 则只能放大正半波或负半波
  • numpy数组元素值的高效查表映射机制

    前往老猿Python博文目录 https blog csdn net LaoYuanPython 一 背景 老猿最近在进行OpenCV直方图均衡学习 发现书中一个神奇的处理机制 通过图像img计算生成直方图 然后生成该直方图的CDF 然后根