日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

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

發布時間:2023/12/15 编程问答 22 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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中的坐标映射到已保存图像文件中的坐标?...的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。