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)

 

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值