这是尝试从matplotlib获取精确像素值的更令人困惑的部分之一. Matplotlib将绘制精确像素值的渲染器与绘制图形和轴的画布分开.

基本上,最初创建(但尚未显示)图形时存在的渲染器不一定与显示图形或将其保存到文件时使用的渲染器相同.

你正在做的是正确的,但是它使用的是初始渲染器,而不是保存图形时使用的渲染器.

为了说明这一点,这里是您的代码的略微简化版本:

import numpy as np

import matplotlib.pyplot as plt

fig = plt.figure()

ax = fig.add_subplot(111)

im = ax.imshow(np.random.random((27,27)), interpolation='nearest')

for i in range(28):

x, y = ax.transData.transform_point([i,i])

print '%i, %i' % (x, fig.bbox.height - y)

fig.savefig('foo.png', dpi=fig.dpi)

这会产生与上面相似的结果:(差异是由于您的机器和我的机器之间的渲染后端不同)

89, 55

107, 69

125, 83

...

548, 410

566, 424

585, 439

但是,如果我们做同样的事情,而是在显示坐标之前绘制图形,我们得到正确的答案!

import numpy as np

import matplotlib.pyplot as plt

fig = plt.figure()

ax = fig.add_subplot(111)

im = ax.imshow(np.random.random((27,27)), interpolation='nearest')

fig.canvas.draw()

for i in range(28):

x, y = ax.transData.transform_point([i,i])

print '%i, %i' % (x, fig.bbox.height - y)

fig.savefig('foo.png', dpi=fig.dpi)

这产生:(记住,数字的边缘在数据坐标中是< -0.5,-0.5>而不是< 0,0>.(即绘制图像的坐标是以像素为中心的).是为什么< 0,0>得到143,55,而不是135,48)

143, 55

157, 69

171, 83

...

498, 410

512, 424

527, 439

当然,绘制图形只是为了在保存时再次绘制它是多余的并且计算成本很高.

为避免两次绘制,可以将回调函数连接到绘图事件,并在此函数中输出HTML图像映射.作为一个简单的例子:

import numpy as np

import matplotlib.pyplot as plt

def print_pixel_coords(event):

fig = event.canvas.figure

ax = fig.axes[0] # I'm assuming there's only one subplot here...

for i in range(28):

x, y = ax.transData.transform_point([i,i])

print '%i, %i' % (x, fig.bbox.height - y)

fig = plt.figure()

ax = fig.add_subplot(111)

im = ax.imshow(np.random.random((27,27)), interpolation='nearest')

fig.canvas.mpl_connect('draw_event', print_pixel_coords)

fig.savefig('foo.png', dpi=fig.dpi)

这样可以产生正确的输出,同时只保存一次,保存时:

143, 55

157, 69

171, 83

...

498, 410

512, 424

527, 439

另一个优点是你可以在调用fig.savefig时使用任何dpi,而无需事先手动设置无花果对象的dpi.因此,当使用回调函数时,你可以只做fig.savefig(‘foo.png’),(或fig.savefig(‘foo.png’,dpi = what))你会获得与保存匹配的输出.png文件. (保存图形时的默认dpi为100,而图形对象的默认dpi为80,这就是为什么必须首先指定dpi与fig.dpi相同)

希望这至少有点清楚!

html5图像映射坐标怎么看,如何将AxesImage中的坐标映射到已保存图像文件中的坐标?...相关推荐

  1. html5图像映射坐标怎么看,html学习之创建图像映射

    作为一名才接触html一个礼拜的人来说,我确实是一只初级菜鸟,不过,我相信在我不断的积累下,365天后,我会有所突破,成功在于积累.沉淀,让我们为了明天,努力,加油! 今天在通过前几天的积累后,终于接 ...

  2. html5 超链接 图像映射,链接图像

    所谓链接图像,既是链接,也是图像.在网页制作的时候,常常会给网页上的某些图片添加一个超链接,当用户点击该图片时,浏览器立即转入该超链接所指向的地址. 中文名 链接图像 外文名 Linking imag ...

  3. 图像映射——计算机视觉

    图像映射 图像映射就是图像之间的变换,加上使用一些计算变换的方法.可以实现图像扭曲变形和图像配准,适用于全景拼接.普遍变换方法有单应性变换.仿射变换.阿尔法通道等等.图像的映射类型有:平移.旋转.仿射 ...

  4. 计算机视觉:图像映射与全景拼接

    目录 1.图像拼接的原理 1.1 基本流程 1.2 图像拼接的几何原理 1.3 2D图像变换原理 1.3.1 2D 图像变换类型 1.3.2 变换参数求解 1.3.3 2D 图像变换 1.4 直线拟合 ...

  5. html 图像映射(一个图像多个连接)

    以前就见过那种导航地图,点击地图的不同省份分别跳到不同的连接,现在用html实现一下,简单的. 图像映射是指一个图像可以建立多个连接,就是在图像上面定义多个区域,每个区域连接到不同的地址. 效果如图: ...

  6. python画球面投影_python - 将图像映射到球体上并绘制3D轨迹 - 堆栈内存溢出

    一旦拥有了你的星球,使用mayavi.mlab.plot3d绘制轨迹很容易,所以我将专注于使用mayavi将行星映射到球体的纹理. (原则上我们可以使用matplotlib执行任务,但与mayavi相 ...

  7. 【python】图像映射:单应性变换与图像扭曲

    [python]图像映射:单应性变换与图像扭曲 单应性变换(Homography) 图像扭曲(仿射变换) 图中图 分段仿射扭曲 单应性变换(Homography) 单应性变换(Homography)即 ...

  8. html5画布可以p图,HTML5图像适合发布在画布上

    我正在研究HTML5移动应用程序.我正在使用画布元素和文件上传元素. 每当用户从手机上点击这个文件上传元素.他看到两种选择. 1.选择现有的照片 2.拍摄新照片HTML5图像适合发布在画布上 如果他选 ...

  9. VTK:图像映射到颜色用法实战

    VTK:图像映射到颜色用法实战 程序输出 程序完整源代码 程序输出 程序完整源代码 #include <vtkImageActor.h> #include <vtkImageData ...

最新文章

  1. P2396 yyy loves Maths VII 状压dp 变态卡常
  2. 完美解决Mac电脑睡眠之后苹果电脑没有声音的方法
  3. Linux 下面解压.tar.gz 和.gz文件解压的方式
  4. java导出简单写法
  5. 性能分析工具System Trace
  6. adb命令从手机端复制数据库文件到PC
  7. 【背包问题】基于粒子群算法求解0-1背包问题matlab代码
  8. js-table2excel 导出带图片的excel
  9. 计算机局域网访问受限制,电脑本地连接受限制的处理方法
  10. A. Diverse Team
  11. 江阴:智慧融入城市血液,打造创新发展新名片
  12. php抢票程序,python并发编程多进程 模拟抢票实现过程
  13. 怎样快速将PDF文件旋转
  14. 职业规划-自动化测试
  15. 机器学习各种算法以及开发具体流程+API具体实例+案例的实现
  16. 练习4.圆中四只鸭子在同一个半圆的概率——MATLAB
  17. 【Ubuntu】【Linux】命令卸载软件
  18. app测试之--安卓手机安装测试包
  19. SpringBoot整合RabbitMQ消息队列
  20. html的视频字幕制作步骤,视频滚动字幕怎么制作(上)

热门文章

  1. hbuilderx 小程序分包_基于uniapp的微信小程序之分包
  2. 判断远程图片是否存在,否则替换成默认图片
  3. html css页脚代码,HTML CSS - 页脚 - 下面的空格
  4. linux如何设置账号全民,linux基本练习:用户和组管理的相关练习
  5. Android监听WIFI信号,这可能是Android上monitore Wifi信号强度的最佳方法
  6. 计算机之父童年的故事ppt,《“计算机之父”童年的故事》PPT课件2
  7. python监控服务器是否在线_python检测服务器是否正常
  8. 【算法竞赛学习】资金流入流出预测-挑战Baseline_时间序列规则
  9. javascript调用dll_Blazor条码识别:Web中运行C#和JavaScript
  10. linux下的shell运算(加、减、乘、除)