前言


  前段时间朋友叫我帮他画一个彩色图像色彩分布图。也就是以彩色图像的RGB值为坐标值,然后用该RGB值对应的颜色来标点,以此形成一幅色彩分布图。pyplot是一个很丰富的可视化工具,笔者趁机学习了一些相关的简单操作,坐此笔记供以后查阅。


subplot()一瞥


  *args :确定子图位置的参数,如(2, 2, 3)=223,表示子图将出现在被划分成两行两列的窗口的第3个网格的位置。
  projection:投影方式,坐标类型,如二维直角坐标系:'rectilinear'(=默认None),极坐标系:'polar’,三维直角坐标系:'3d’,地球投影:'aitoff', 'hammer', 'lambert', 'mollweide'等.

ax2 = plt.subplot(221, projection='rectilinear')
ax2.set_title('rectilinear')
ax2 = plt.subplot(222, projection='polar')
ax2.set_title('polar')
ax2 = plt.subplot(223, projection='3d')
ax2.set_title('3d')
ax2 = plt.subplot(224, projection='mollweide')
ax2.set_title('mollweide')
ax2.grid(True)
plt.show()

图1.projection style

  facecolor :该关键字也可以用fc代替,颜色表示有多种方式。
  1. RGB 或者RGBA元组,经检验RGB的np数组也可以,数字要限制在[0,1]之间,其中A表示透明度。如fc = (.18, .31, .31)fc = (0.1, 0.2, 0.5, 0.3)facecolorc=np.array([.18, .31, .31])
  2. 十六进制RGB或者RGBA字符串,与第一种类似。如fc ='#0F0F0F' 、'facecolor=#0F0F0F0F'
  3. 简单字符,一般是用颜色单词首字母来表示,能表示的颜色有限,有:'b', 'g', 'r', 'c', 'm', 'y', 'k', 'w',其中C = Cyan(青色)、M = Magenta(洋红或品红、 Y = Yellow(黄色)、K = blacK(黑色、W=white (白色)
  4. tab:颜色单词,有: 'tab:blue', 'tab:orange', 'tab:green', 'tab:red', 'tab:purple', 'tab:brown', 'tab:pink', 'tab:gray', 'tab:olive', 'tab:cyan'.
  注:purple,紫色;olive,黄褐色;
  其他参数(部分):title(标题) xlim(坐标范围) xlabel (轴标识)xticklabels(刻度标识) xtick(刻度)


彩色图像色彩分布图


  • 代码
import numpy as np
import matplotlib.pyplot as plt
import cv2 as cvimg = cv.imread('lena.jpg')
b, g, r = cv.split(img)
img = cv.merge([r, g, b]) #为了适应fc中元组顺序为RGB,故调整
draw = np.reshape(img, (-1, 3))
lists = list(set([tuple(t) for t in draw]))  #去除列表中重复行
print(np.array(lists))
draw = tuple(draw/255)
ax = plt.subplot(1, 1, 1, projection='3d', fc=(.18, .31, .31))  # 创建一个三维绘图,并设置颜色ax.scatter(r, g, b, s=1, color=draw)  # 以RGB值为坐标绘制数据点,并以RGB值为点颜色ax.set_zlim(0, 255)
ax.set_ylim(0, 255)
ax.set_xlim(0, 255)
ax.set_zlabel('B', c='b')  # 坐标轴
ax.set_ylabel('G', c='g')
ax.set_xlabel('R', c='r')
ax.set_title('clolored image distribution', color='w')
ax.tick_params(labelcolor='w')
plt.show()
  • 测试结果

  纯红色测试图片

图2.纯红色测试图片

  去掉重复行之后的RGB值:[[254 0 0]]
  绘制颜色分布结果

图3.纯红色测试图片颜色分布

  纯红色纯绿色相间测试图片

图4.纯红色纯绿色相间测试图片

去掉重复行之后的RGB值:可见混合之后有些地方的颜色就不那么纯净了
[[ 1 254 3] [253 0 0] [ 0 255 1] [ 4 255 0] [255 1 3] [253 2 0] [ 1 255 2] [254 0 0] [ 1 252 0] [255 1 1] [ 1 255 1] [255 1 0] [254 0 2] [ 1 255 0] [252 0 0 [ 0 254 0] [253 1 0] [ 0 255 4] [254 1 0] [ 0 254 2] [254 2 1] [254 2 0] [ 0 255 2] [ 0 255 3] [253 0 2] [ 0 255 0]]

图5.纯红色纯绿色相间测试图片色彩分布

  计算机视觉经典图像lena

图6.lena

  计算机视觉经典图像lena色彩分布

图6.lena色彩分布


参考


   https://matplotlib.org/api/_as_gen/matplotlib.pyplot.subplot.html#matplotlib.pyplot.subplot

pyplot学习笔记(一):使用scatter画彩色图像三维散点图,点坐标为RGB值,点颜色为RGB值决定的颜色(彩色图像色彩分布图)相关推荐

  1. ArcGIS案例学习笔记2_2_等高线生成DEM和三维景观动画

    ArcGIS案例学习笔记2_2_等高线生成DEM和三维景观动画 计划时间:第二天下午 教程:Pdf/405 数据:ch9/ex3 方法: 1. 创建DEM SA工具箱/插值分析/地形转栅格 2. 生成 ...

  2. Eigen库学习笔记(四)Eigen用于三维张量

    Eigen库学习笔记(四)Eigen用于三维张量 1.示例: 2.3维张量 3.固定大小矩阵TensorFixedSize 4.常用函数API 5.矩阵乘法与广播机制 Tensor的矩阵乘法操作 Te ...

  3. css中怎么加入立体模型,CSS学习笔记二:css 画立体图形

    继上一次学了如何去运用css画平面图形,这一次学如何去画正方体,从2D向着3D学习,虽然有点满,但总是一个过程,一点一点积累,然后记录起来. Transfrom3D 在这一次中运用到了一下几种属性: ...

  4. scatter的用法 随机颜色_plt.scatter画分类月亮湾散点图

    这几天碰到一个需求,需要画出分类面以及区分不同分类点的形状和颜色,发现scatter并不能同时支持及区分形状和颜色,自我发现一种实现放式,以此分享. ps:关于此方法的基本参数解析请查阅官网介绍.此文 ...

  5. CSS学习笔记二:css 画立体图形

    继上一次学了如何去运用css画平面图形,这一次学如何去画正方体,从2D向着3D学习,虽然有点满,但总是一个过程,一点一点积累,然后记录起来. Transfrom3D 在这一次中运用到了一下几种属性: ...

  6. javaFX学习笔记之 散布图(Scatter Chart)

    (Scatter Chart),它是一种用一组点来表示数据的双轴图表. 每个点通过X和Y值来定义.跟其他双轴图表类似,你可以创建一组或者多组数据.图展示了一个带有三组数据的Scatter Chart. ...

  7. Visdom可视化学习笔记(一):通过visdom画曲线和显示图片总结

    文章目录 导入visdom 设置线性和颜色 画一条折线 画两条折线 同时画多条曲线 显示实时的动态曲线 显示图片 显示文本 导入visdom import visdom viz = visdom.Vi ...

  8. 好记性不如烂笔杆-android学习笔记十四 EditText 画行,解决光标压线问题

    这个问题我在网上看来很多方法,有些看得似懂非懂的,后来自己采用一种比较投机的方法,居然可行,呵呵,拿出来跟大家分享一下. 其实就是把画的线向下偏移一定高度,当然针对不同分辨率,这个值也就不同: (因为 ...

  9. python画笑脸-python 学习笔记——学会用turtle画笑脸

    Life is short, you need Python 人生苦短,我用Python -- Bruce Eckel 上课听了老师说的一句话,至此难以忘怀,很是受用.老师是知识的传授者,这话果然没毛 ...

最新文章

  1. mqtt协议视频教程_MQTT协议教程
  2. 【Android 安装包优化】Android 中使用 SVG 图片 ( SVG 矢量图简介 | Android 中生成 Vector 矢量图资源 )
  3. 什么是nginx负载均衡高可用
  4. CSS的历史与工作原理
  5. unicode编码表_6-字符编码-文件处理
  6. 三种实例化bean方式——Spring对bean的管理(一)
  7. PDM,读《电商产品经理宝典:电商后台系统产品逻辑全解析》
  8. 遥感原理与应用总结——第二章:遥感平台及运行特点
  9. 小程序父子组件间传值(微信/支付宝/钉钉)
  10. nmds与mds的区别_聚类分析和NMDS分析的基本步骤.doc
  11. 假短信截图在线生成器_一个工具箱:汇集200多款实用又好玩的在线工具的神奇百宝箱...
  12. 用计算机求和公式,全国计算机一级等考excel之sum求和函数
  13. 基于灰度直方图和边界方向直方图的图像检索
  14. 择时 配置 选股0909
  15. autoCAD 创建和编辑AutoCAD图元
  16. 【小概念】格拉姆矩阵(gram matrix)
  17. pgbackrest配置监控、冗余策略
  18. c语言程序点亮数码管,怎样点亮数码管
  19. mysql英文怎么发音_英语口语怎么练最有效?知道这3个方法就够了!
  20. Proteus软件下载安装(包含win10安装proteus8.0+报错问题解决)

热门文章

  1. Map集合转为实体对象
  2. signal 6 (SIGABRT), code -6 (SI_TKILL) Abort message: ‘stack corruption detected (-fstack-protector
  3. 13_android编译ijkplayer
  4. 基于Springboot+SpringDataJpa+Mysql智能停车管理系统
  5. Speedtree学习笔记(案例)——草的制作
  6. 曲线数据提取-图片转数据或曲线重绘,曲线更换颜色及曲线复现
  7. 东芝5015AC打印机设置扫描发送邮件功能
  8. Forest源码探析
  9. win10安装配置debug.exe和DOSBox
  10. uni-app发行微信小程序失败