在Python中的彩色映射一文中,向大伙介绍了一下matplotlib模块中内嵌的colormap,以及如何将这些colormap中的数值导出来以供使用。

在续篇中我们将进一步向大家介绍如何生成自定义colormap。如现在有(255,0,0), (255,255,0), (255,255,255), (0,157,0), (255,0,255)五种颜色,我们如何用这些颜色作为区间边界生成一个自定义的colormap呢?

最简单的情形,以五种颜色作为边界,我们将整个灰度级平均分成4个等分,对于[0, 255]灰度区间而言,均分后的区间分别为[0, 64),[64, 128),[128, 191),[191, 255]。那么我们只需要在每个区间分别对R、G、B三个通道进行插值即可,如线性插值,具体实现如下。

def linear_colormap(colors, max):rows, cols = np.shape(colors)position = []  for i in range(0, rows):    position.append(np.int(round((1.0 * i * max)/(rows - 1))))color_map = []#遍历所有区间for i in range(0, rows - 1):#遍历区间中的所有像素点for j in range(position[i], position[i + 1]):color_r = (colors[i+1][0] - colors[i][0]) * (j- position[i])/(position[i + 1] - position[i]) + colors[i][0]color_g = (colors[i+1][1] - colors[i][1]) * (j- position[i])/(position[i + 1] - position[i]) + colors[i][1]color_b = (colors[i+1][2] - colors[i][2]) * (j- position[i])/(position[i + 1] - position[i]) + colors[i][2]color = (color_r, color_g, color_b)color_map.append(color)#最后一个灰度级没有遍历到,需要进行特殊处理color_map.append(colors[rows - 1])return color_map

其中,参数max是灰度级的最大值,这里即为255。顺便也贴一下绘制colormap的代码:

def draw_colormap(color_map):map_image_arr = np.zeros((50, 256, 3), np.uint8)for i in range(0, 256, 1):map_image_arr[:, i, 0] = color_map[i][0]map_image_arr[:, i, 1] = color_map[i][1]map_image_arr[:, i, 2] = color_map[i][2]   map_image = Image.fromarray(map_image_arr)map_image.show()map_image.save("colormap.png")return
这样,我们就得到了自定义的colormap。

另外,我们也可以通过制定区间宽度,即上述position的值来生成colormap,如position = [0, 50, 100, 150, 255]。此时只需要对上述程序略作修改即可。

def linear_colormap(colors, max, position):rows, cols = np.shape(colors)color_map = []#遍历所有区间for i in range(0, rows - 1):#遍历区间中的所有像素点for j in range(position[i], position[i + 1]):color_r = (colors[i+1][0] - colors[i][0]) * (j- position[i])/(position[i + 1] - position[i]) + colors[i][0]color_g = (colors[i+1][1] - colors[i][1]) * (j- position[i])/(position[i + 1] - position[i]) + colors[i][1]color_b = (colors[i+1][2] - colors[i][2]) * (j- position[i])/(position[i + 1] - position[i]) + colors[i][2]color = (color_r, color_g, color_b)color_map.append(color)#最后一个灰度级没有遍历到,需要进行特殊处理color_map.append(colors[rows - 1])return color_map

这样获得的colormap如下图所示。

更复杂一点,我们可以使用不同的插值算法,来进行自定义colormap,如使用二次、三次插值等,这里就不再作具体的介绍,感兴趣的同学可以尝试一下!

2017.03.09

【python图像处理】彩色映射(续篇)相关推荐

  1. 【OpenCV3】彩色映射——cv::applyColorMap()与cv::LUT()详解

    在图像处理的过程中,我们通常会遇到将灰度图像映射成彩色图像的情形(即通常所说的伪彩映射),OpenCV2和OpenCV3中均提供了两个用于伪彩映射的函数--cv::applyColorMap()和cv ...

  2. Python图像处理丨详解图像去雾处理方法

    摘要:本文主要讲解ACE去雾算法.暗通道先验去雾算法以及雾化生成算法. 本文分享自华为云社区<[Python图像处理] 三十.图像预处理之图像去雾详解(ACE算法和暗通道先验去雾算法)丨[拜托了 ...

  3. python图像处理《数字图像处理与python实现》读书笔记

    文章目录 很重要! 第一章 基础知识 1.1 图像采样和量化 1.2 图像的表示和可视化 1.3 简单图像处理 参考 很重要! scikit-image的开发文档:https://scikit-ima ...

  4. python 图像处理

    转自: 点击打开链接 第 1 章 基本的图像操作和处理 本章讲解操作和处理图像的基础知识,将通过大量示例介绍处理图像所需的 Python 工具包,并介绍用于读取图像.图像转换和缩放.计算导数.画图和保 ...

  5. Python图像处理基础

    Python图像处理基础 对我个人而言使用Python图像处理意在取代matlab,集中化使用Python环境保证之后在机器学习和OpenCV的使用上具有一致性,虽然从实验室师兄师姐的口中得知Pyth ...

  6. Python 图像处理实用指南:1~5

    原文:Hands-On Image Processing with Python 协议:CC BY-NC-SA 4.0 译者:飞龙 本文来自[ApacheCN 计算机视觉 译文集],采用译后编辑(MT ...

  7. Python图像处理

    一.简介 实现计算机视觉任务的过程中,不可避免地需要对图像进行读写操作以及图像预处理操作,下面介绍两个常用的Python图像处理库:OpenCV和Pillow. OpenCV全称是由英特尔公司资助的开 ...

  8. 《OpenCv视觉之眼》Python图像处理六 :Opencv图像傅里叶变换和傅里叶逆变换原理及实现

    本专栏主要介绍如果通过OpenCv-Python进行图像处理,通过原理理解OpenCv-Python的函数处理原型,在具体情况中,针对不同的图像进行不同等级的.不同方法的处理,以达到对图像进行去噪.锐 ...

  9. Opencv Python图像处理进阶教程②

    Opencv Python图像处理进阶教程 概述: 代码: https://github.com/bai1231/opencv-learn_and_pratice 1. 图像卷积与应用 图像去噪 图像 ...

最新文章

  1. 不属于未来计算机范畴,智慧职教云课堂工程数学-2020年春网课答案
  2. Linux Linux程序练习十一(网络编程大文件发送UDP版)
  3. Java并发编程之:Vector和ArrayList的区别
  4. python批量生成图_python图像处理-批量生成纯色图片
  5. 树复制替换id_程序员的进阶课-架构师之路(12)-2-3-4树
  6. 页面提交插入到数据库 1.jsp
  7. 程序员有必要参加软考吗?大一可以考的编程证书还有哪些
  8. c++ 返回智能指针_C++核心指南(17) I.11 禁止使用指针(T*)或引用(T)来转移所有权...
  9. Java基础13:反射与注解详解
  10. Apache Calcite官方文档中文版-概览-1.背景
  11. android adb 进程端口号被占解决方法
  12. kotlin 类构造函数_Kotlin类– Kotlin构造函数
  13. 写python的笔记本_python笔记本:更改写入的fi
  14. 遇见C++ Lambda
  15. Java学习笔记(完结)
  16. 6大黑科技app合集,绝对让你大开眼界
  17. go 对象json转map
  18. 裂变!裂变!这里有一份完整的微信流量裂变指南
  19. 2020-11-12 Python 类继承、多态和特殊模式
  20. 一条命令(dd)制作Centos(Linux)优盘(U盘)启动盘

热门文章

  1. JVM-11虚拟机性能监控与故障处理工具之【JDK的可视化工具-JConsole】
  2. Shell-实际业务操作03
  3. oracle集群 节点切换不,Oracle 11gR2 RAC集群单节点关闭开启
  4. eclipse java8报错_eclipse4.3安装支持Java8插件,之后就报错无法打开eclipse,求解?
  5. Qt窗口在屏幕上居中显示
  6. pemicro识别不了驱动_usb驱动无法识别如何解决,手把手教你如何解决usb驱动问题...
  7. 学习Kotlin(六)扩展与委托
  8. 连云港职业技术学院有计算机系吗,连云港职业技术学院电子信息工程技术专业...
  9. swing查询输入框无值时出现null异常_如何优雅处理代码中 Null 值引起的 Bug?告别 Null 恐惧症!...
  10. python gui打包exe pyinstaller打包运行失败 Failed to execute script pyi_rth_multiprocessing