python學習 圖片粘貼,鼠標單擊獲取位置座標

一、要求

XR請我幫一個忙:幫他處理9張電鏡圖像,具體任務就是剪裁掉原來的座標,按照新的格式加上標號和座標:

先說一下我做完以後的總體感受:

1、變量、變量很重要!不要覺得一開始什麼都設一個變量很麻煩,如果是常量的話最後改來改去更麻煩。

2、最好把圖片都預處理爲統一大小,不然一張張剪裁調整太麻煩了。

3、儘可能減少人爲計算。

3、我要用我的代碼做更多的事情!

二、思路

不知道python有沒有直接在圖片上插入數字、符號的功能。

1、先在PPT裏把需要的刻度和標號做好,然後截圖或者導出圖片保存。就是因爲有的是截圖,有的是直接從PPT導出(學了一招:把多個圖形“組合”成一個圖形),大小不一,給接下來的處理埋下了後患。

2、用python裏的pillow模塊將圖片和標號、刻度粘貼在一起。

三、代碼

1、點擊圖片某處獲取位置座標:

先確定一下需要粘貼的大致位置,再對標號圖和刻度圖進行適當放縮。

def on_press(event):
    print("my position:" ,event.button,event.xdata, event.ydata)
fig = plt.figure()
plt.imshow(img, animated= True)# 把獲取的圖片放進座標軸
fig.canvas.mpl_connect('button_press_event', on_press)
plt.show()

可以看出標號的位置大約爲:

my position: MouseButton.LEFT 213.69354838709677 99.24193548387086

2、獲取標號圖大小進行適當縮放:

直接從PPT裏導出的圖片上下還有白邊邊,需要剪裁一下

(x_num,y_num) = img_num.size
print('x_num,y_num:', x_num, y_num)
img_num = img_num.crop((1,9,106,80))  # (left, upper, right, lower)
plt.imshow(img_num)
plt.show()
(x_num,y_num) = img_num.size
print('x_num,y_num:', x_num, y_num)

用同樣的方法處理尺度圖。

3、粘貼:

width_num = int(x_num*1.5)
height_num = int(y_num*1.5)
img_num = img_num.resize((width_num, height_num),Image.ANTIALIAS)

img_dim = img_dim.resize((int(x_dim*1.5),int(y_dim*1.5)), Image.ANTIALIAS)
#plt.imshow(img_dim)
#plt.show()

(x,y) = img.size #read image size
print( 'original size: ',x,y)#打印圖片原始尺寸


box_num = (000,000,width_num, height_num)
box_dim = (x1-int(x_dim*1.5), y-int(y_dim*1.5), x, y)
img_cropped.paste(img_num, box_num)   # 粘貼圖片
img_cropped.paste(img_dim, box_dim)

4、顯示、保存圖片:

plt.imshow(img_cropped)
plt.show()

out =img_cropped .resize((x1,y1),Image.ANTIALIAS) #resize image with high-quality
out.save(outfile)

全部代碼(單張圖片):

from PIL import Image
import matplotlib.pyplot as plt
import numpy as np
import matplotlib.animation as animation

infile = 'D:\\lmr_cropped\\c_LMR_i005.tif'
infile_dim='D:\\lmr\\500nm.png'
infile_num='D:\\lmr\\5.png'
outfile = 'D:\\lmr\\a_LMR_i005.tif'




img = Image.open(infile,'r')#讀取圖片
img_num = Image.open(infile_num,'r')#讀取標號
img_dim = Image.open(infile_dim,'r')#讀取尺度

def on_press(event):
    print("my position:" ,event.button,event.xdata, event.ydata)
fig = plt.figure()
plt.imshow(img, animated= True)# 把獲取的圖片放進座標軸
fig.canvas.mpl_connect('button_press_event', on_press)
plt.show()

(x_num,y_num) = img_num.size
print('x_num,y_num:', x_num, y_num)
img_num = img_num.crop((1,9,106,80))  # (left, upper, right, lower)
plt.imshow(img_num)
plt.show()
(x_num,y_num) = img_num.size
print('x_num,y_num:', x_num, y_num)

(x_dim,y_dim) = img_dim.size
print('x_dim,y_dim:', x_dim, y_dim)
plt.imshow(img_dim)
plt.show()

width_num = int(x_num*1.5)
height_num = int(y_num*1.5)
img_num = img_num.resize((width_num, height_num),Image.ANTIALIAS)

img_dim = img_dim.resize((int(x_dim*1.5),int(y_dim*1.5)), Image.ANTIALIAS)
#plt.imshow(img_dim)
#plt.show()

(x,y) = img.size #read image size
print( 'original size: ',x,y)#打印圖片原始尺寸


box_num = (000,000,width_num, height_num)
box_dim = (x1-int(x_dim*1.5), y-int(y_dim*1.5), x, y)
img_cropped.paste(img_num, box_num)   # 粘貼圖片
img_cropped.paste(img_dim, box_dim)


plt.imshow(img_cropped)
plt.show()

out =img_cropped .resize((x1,y1),Image.ANTIALIAS) #resize image with high-quality
out.save(outfile)

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章