Python 更改图像的范围并使用该范围而不是像素匹配绘图

Python 更改图像的范围并使用该范围而不是像素匹配绘图,python,image,matplotlib,scale,axis,Python,Image,Matplotlib,Scale,Axis,我在matplotlib中创建了一个包含两个子图的图形,第一个子图显示了一个图像,上面画了一条线,第二个子图显示了该线上的像素值图。我在图像中添加了一个范围,因此轴显示图像的比例,而不是以像素为单位的距离,我希望第二个子图的x轴显示相同的比例距离,但是我不知道如何更改该轴,因为我正在从表示图像的数组中提取数据 我认为解决这个问题的办法是增加我的图像的比例因子(1.93μm/像素),但我不确定在哪里包括这个因子,这样也不会缩放像素的强度 umPerPx = 1.93 linexPx = 225 l

我在matplotlib中创建了一个包含两个子图的图形,第一个子图显示了一个图像,上面画了一条线,第二个子图显示了该线上的像素值图。我在图像中添加了一个范围,因此轴显示图像的比例,而不是以像素为单位的距离,我希望第二个子图的x轴显示相同的比例距离,但是我不知道如何更改该轴,因为我正在从表示图像的数组中提取数据

我认为解决这个问题的办法是增加我的图像的比例因子(1.93μm/像素),但我不确定在哪里包括这个因子,这样也不会缩放像素的强度

umPerPx = 1.93
linexPx = 225
liney1Px, liney2Px = 50, 100
linexUm = 225 * umPerPx
liney1Um, liney2Um = 50 * umPerPx, 100 * umPerPx

img = cv2.imread(test.tif, -1)
img_h_px, img_w_px = img.shape
img_h_um, img_w_um = img_h_px * umPerPx, img_w_px * umPerPx
fig = plt.figure(figsize=(12, 4))

ax_img = fig.add_subplot(1, 2, 1)
ax_img.set_title(imgDirList[i][:-4])
ax_img.imshow(img, cmap='gray', extent=[0, img_w_um, img_h_um, 0])
ax_img.plot([linexUm, linexUm], [liney1Um, liney2Um], 'r', linewidth=1)
ax_img.set_ylabel('Distance (microns)')

ax_prof = fig.add_subplot(1, 2, 2)
ax_prof.set_title('Intensity Profile')
ax_prof.plot(img[:, linexPx], 'r')
ax_prof.set_ylim(min(img[liney1Px:liney2Px, linexPx]), max(img[liney1Px:liney2Px, linexPx]))
ax_prof.set_xlim([liney1Px, liney2Px])
ax_prof.set_xlabel('Distance (pixels)')
ax_prof.set_ylabel('Intensity')

plt.show()

在没有实际数据的情况下很难确定,但在我看来,你需要缩放的是第二个图的x值。目前,您没有提供x阵列,因此它是根据您提供的y阵列自动计算的。但像这样的方法可能会更好:

ax_prof.plot(np.arange(len(img[:, linexPx]))*umPerPx, img[:, linexPx], 'r')