html5图像映射坐标怎么看,如何将AxesImage中的坐标映射到已保存图像文件中的坐标?...
這是嘗試從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中的坐标映射到已保存图像文件中的坐标?...的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 网上彩票平台哪个好 最可靠的网上彩票平台
- 下一篇: 鸿蒙首饰用什么合成,天下HD鸿蒙炼炉是什