返回OpenCV-Python教程

原文链接:http://www.juzicode.com/opencv-note-color-map-applycolormap

在OpenCV中通常使用cvtColor()进行色彩空间的转换,它可以实现彩色图像在各种色彩空间里的转换,也可以用于彩色图像和灰度图像之间相互转换,但是在彩色图像转换到灰度图像后,再用该灰度图转换回彩色图像只是名义上多通道的彩色图像,人眼看到的却不是“彩色”了。下面这个例子展示了这个彩转灰、灰转彩的过程:

#vx:桔子code / juzicode.com
import cv2
img_src = cv2.imread("nezha.jpg")
img_gray = cv2.cvtColor(img_src,cv2.COLOR_BGR2GRAY)    #彩色转灰度
print(img_gray.shape)    #单通道
img_color = cv2.cvtColor(img_gray,cv2.COLOR_GRAY2BGR)  #灰度转彩色
print(img_color.shape)   #3通道
cv2.imshow('img_color',img_color)
cv2.imshow('img_src',img_src)
cv2.waitKey()
cv2.destroyAllWindows()    

上图中右边是用cvtColor转换为灰度图后再转回的彩色图,在这个彩色图里面我们一点“彩色”的影子都看不到了。

有没有方法可以让转换成后的彩色图看起来更“彩色”呢?​这里介绍一个功能更强大的接口函数:applyColorMap(),它可以将灰度图像转换成彩色图像,转换的模式达22种之多,它的接口形式是这样的:

cv2.applyColorMap(src, colormap[, dst]) ->dst

其中src为输入图像,可以是单通道或3通道的8bit图像。

colormap为颜色图模式,可以传入整数0~21对应各种不同的颜色图,或者用cv2.COLORMAP_AUTUMN(等价于0)、cv2.COLORMAP_BONE(等价于1)等方式传入,OpenCV源码头文件中定义的22种模式如下:

//! GNU Octave/MATLAB equivalent colormaps
enum ColormapTypes
{COLORMAP_AUTUMN = 0, //!< ![autumn](pics/colormaps/colorscale_autumn.jpg)COLORMAP_BONE = 1, //!< ![bone](pics/colormaps/colorscale_bone.jpg)COLORMAP_JET = 2, //!< ![jet](pics/colormaps/colorscale_jet.jpg)COLORMAP_WINTER = 3, //!< ![winter](pics/colormaps/colorscale_winter.jpg)COLORMAP_RAINBOW = 4, //!< ![rainbow](pics/colormaps/colorscale_rainbow.jpg)COLORMAP_OCEAN = 5, //!< ![ocean](pics/colormaps/colorscale_ocean.jpg)COLORMAP_SUMMER = 6, //!< ![summer](pics/colormaps/colorscale_summer.jpg)COLORMAP_SPRING = 7, //!< ![spring](pics/colormaps/colorscale_spring.jpg)COLORMAP_COOL = 8, //!< ![cool](pics/colormaps/colorscale_cool.jpg)COLORMAP_HSV = 9, //!< ![HSV](pics/colormaps/colorscale_hsv.jpg)COLORMAP_PINK = 10, //!< ![pink](pics/colormaps/colorscale_pink.jpg)COLORMAP_HOT = 11, //!< ![hot](pics/colormaps/colorscale_hot.jpg)COLORMAP_PARULA = 12, //!< ![parula](pics/colormaps/colorscale_parula.jpg)COLORMAP_MAGMA = 13, //!< ![magma](pics/colormaps/colorscale_magma.jpg)COLORMAP_INFERNO = 14, //!< ![inferno](pics/colormaps/colorscale_inferno.jpg)COLORMAP_PLASMA = 15, //!< ![plasma](pics/colormaps/colorscale_plasma.jpg)COLORMAP_VIRIDIS = 16, //!< ![viridis](pics/colormaps/colorscale_viridis.jpg)COLORMAP_CIVIDIS = 17, //!< ![cividis](pics/colormaps/colorscale_cividis.jpg)COLORMAP_TWILIGHT = 18, //!< ![twilight](pics/colormaps/colorscale_twilight.jpg)COLORMAP_TWILIGHT_SHIFTED = 19, //!< ![twilight shifted](pics/colormaps/colorscale_twilight_shifted.jpg)COLORMAP_TURBO = 20, //!< ![turbo](pics/colormaps/colorscale_turbo.jpg)COLORMAP_DEEPGREEN = 21  //!< ![deepgreen](pics/colormaps/colorscale_deepgreen.jpg)
};

各种ColormapTypes对应的色彩是下图这样的,有各种春夏秋冬四季风格、冷热风格等等:

下面这个例子将本地文件按照灰度图方式读入,然后将该灰度图用22种模式依次转换后显示、存储:

#vx:桔子code / juzicode.com
import cv2
img_gray = cv2.imread("nezha.jpg",cv2.IMREAD_GRAYSCALE)
for i in range(22):dst = cv2.applyColorMap(img_gray,i) cv2.imshow('map',dst) cv2.waitKey(500)cv2.imwrite("map-"+str(i)+".jpg",dst)

转换后的效果是这样的:

这个例子里面我们用来转换的源图像是一个灰度图,实际上我们也可以用彩色图像作为源图像,经过桔子菌的测试,用彩色图和灰度图转换出来的效果是一样的。

扩展阅读:

  1. OpenCV-Python教程:色彩空间变换
  2. OpenCV-Python教程

OpenCV-Python教程:颜色图(applyColorMap)[只需几行代码生成22种风格各异的彩色图]相关推荐

  1. python画漏斗图_只需简单几步,教你用python完成漏斗图的绘制

    商业分析中经常会用到漏斗图.尤其是在网站流量监控.电商商品转化等一些数据运营方面.漏斗图之所以是漏斗就就是倒三角的形状,是因为用户或者流量,集中从某个功能点进入,很大可能会按照产品本身设定的流程来完成 ...

  2. Python批量下载XKCD漫画只需20行命令

    XKCD是一个流行的极客漫画网站,其官网首页有一个 Prev 按钮,让用户导航到前面的漫画.如果你希望复制该网站的内容以在离线的时候阅读,那么可以手动导航至每个页面并保存.但手动下载每张漫画要花较长的 ...

  3. OpenCV Python教程(3)(4)(5): 直方图的计算与显示 形态学处理 初级滤波内

    OpenCV Python教程(3.直方图的计算与显示) 本篇文章介绍如何用OpenCV Python来计算直方图,并简略介绍用NumPy和Matplotlib计算和绘制直方图 直方图的背景知识.用途 ...

  4. OpenCV Python教程(2、图像元素的访问、通道分离与合并)

    OpenCV Python教程之图像元素的访问.通道分离与合并 转载请详细注明原作者及出处,谢谢! 访问像素 像素的访问和访问numpy中ndarray的方法完全一样,灰度图为: [python] v ...

  5. Python复现颜色图绘制大赛的作品

    Python复现颜色图绘制大赛的作品 受slandarer大佬启发,自己用Python复现了一下七年前的一个颜色图绘图大赛的一些作品.把复现过程记录如下: 这场比赛居然已经是七年前的事情了,大佬A F ...

  6. 区块链技术实现只需180行go代码!

    区块链技术实现只需180行go代码! 通过本文,你将可以使用Go创建自己的区块链.理解哈希函数是如何保持区块链的完整性.掌握如何创造并添加新的块.实现多个节点通过竞争生成块.通过浏览器来查看整个链.了 ...

  7. JavaScript开发区块链只需200行代码

    JavaScript开发区块链只需200行代码 用JavaScript开发实现一个简单区块链.通过这一开发过程,你将理解区块链技术是什么:区块链就是一个分布式数据库,存储结构是一个不断增长的链表,链表 ...

  8. 【高代码文件格式API】道宁为您提供文件格式API集——Aspose,只需几行代码即可创建转换和操作100多种文件格式

    Aspose系列产品是 高代码文件格式API 使您的应用程序能够处理 适用于所有主要平台的 Word.Excel.PDF.PowerPoint.Outlook 和100多种其他文件格式 Aspose提 ...

  9. lstm代码_只需5行代码!LSTM时间序列建模以及预测

    最近我在github上看到一个项目,项目内容是将深度学习方法(LSTM.RNN.GRU)进行时间序列建模的过程进行了封装,使得调用者调用者只需5行代码能完成时间序列建模以及预测的全过程. 项目本身是使 ...

最新文章

  1. Using Apache2 with JBoss AS7 on Ubuntu
  2. 辛东方:科技的发展将导致更多人失业?
  3. 【通俗易懂】层次聚类算法的原理及实现
  4. 2.2.2 操作系统之进程调度的时机(主动放弃与被动放弃)、切换与过程(广义与狭义)、方式(非剥夺与剥夺)
  5. BZOJ3577 : 玩手机
  6. oracle 包 解密,oracle9.1的加密解密包的用法
  7. 鸿蒙系统发布IT直播,华为开源平台上线:鸿蒙系统、方舟编译器在列
  8. cad文字插件_超好用的4个CAD应用程序,让你提升工作幸福感,裂墙推荐
  9. HDU2019 数列有序!
  10. iOS 关于TouchID指纹解锁的实现
  11. Atitit 语言的异常机制 目录 1. 异常处理,英文名为exceptional handling, 是代替日渐衰落的error code方法的新法, 1 2. 三种模式 1 2.1. 终止模式
  12. python数据库教程_python使用mysql操作教程
  13. python生成图片验证码
  14. 《站在巨人的肩膀上-英语交流会有感》
  15. [data engineering] (一)数据工程师的工作内容以及需要的软硬实力
  16. java实现不确定进度条_JavaFX在执行过程时不确定进度条
  17. 基于51单片机的温湿度检测及调节系统
  18. java ebcdic编码转换_JAVA实现ASCII码与EBCDIC码的相互转换
  19. JS逆向——AES加密案例(openlaw登录)
  20. micro python 语音识别_语音识别

热门文章

  1. python 滑动验证码_python:TX滑动验证码识别方案一
  2. 【小学】招生——统计适龄儿童数据
  3. 台式计算机的主流配置,目前台式电脑的主流配置有哪些?
  4. 数据库之删除表数据drop、truncate和delete的用法
  5. AI绘画软件数画上线真人元宇宙ai虚拟头像,制作教程来了
  6. php数据库中创建视图,视图创建
  7. jQuery学习笔记(黑马课堂+补充)
  8. 一天一个小知识-- kt中的object关键字
  9. datatables mysql_DataTables的使用
  10. dataTables使用