#python #matplotlib
Вопрос:
Я пытаюсь сохранить изображение, которое должно иметь размер (230, 256) в пикселях. Однако, поскольку расчеты находятся в пределах дюймов, я пытаюсь найти способ преобразовать следующее изображение в это измерение:
label = np.zeros((230,256)) my_dpi = 96 # Create a figure. Equal aspect so circles look circular fig,ax = plt.subplots(1, figsize=(4.5, 3.27)) ax.set_aspect('equal') ax.set_axis_off() # Show the image ax.imshow(label) circ1 = Circle((28,64),10, color='white') circ1 = Circle((26,65),13, color='white') circ2 = Circle((100,65),13, color='white') circ3 = Circle((172,65),11, color='white') circ4 = Circle((247,65),11, color='white') circ5 = Circle((315,65),10, color='white') ax.add_patch(circ1) ax.add_patch(circ2) ax.add_patch(circ3) ax.add_patch(circ4) ax.add_patch(circ5) # Show the image plt.show() fig.savefig(nimage[23].split('.')[0] '_gt.jpg', bbox_inches='tight', dpi=my_dpi)
Я также попытался адаптировать dpi, но он не превышал ожидаемый размер. Кто-нибудь может объяснить, как преобразовать значения dpi в пиксели в matplotlib?
Ответ №1:
Ваш DPI напрямую связан с размером изображения (который определяется в дюймах). DPI (точек на дюйм), умноженное на вашу ширину/высоту из figsize, позволит вам рассчитать размер в пикселях. Приведенный ниже снипер сгенерирует фигуру с вашими требуемыми размерами. Пожалуйста, обратите внимание, что соотношение сторон НЕ совпадает между тем, что у вас было в вашем размере и этикетке.
label = np.zeros((230,256)) my_dpi = 96 w = 230./my_dpi h = 256./my_dpi # Create a figure. Equal aspect so circles look circular fig = plt.figure() ax = fig.add_subplot(111) ax.set_aspect('equal') ax.set_axis_off() # Show the image ax.imshow(label) circ1 = Circle((28,64),10, color='white') circ1 = Circle((26,65),13, color='white') circ2 = Circle((100,65),13, color='white') circ3 = Circle((172,65),11, color='white') circ4 = Circle((247,65),11, color='white') circ5 = Circle((315,65),10, color='white') ax.add_patch(circ1) ax.add_patch(circ2) ax.add_patch(circ3) ax.add_patch(circ4) ax.add_patch(circ5) # Show the image plt.show() fig.set_size_inches(w, h, forward=True) fig.tight_layout() fig.savefig(nimage[23].split('.')[0] '_gt.jpg', dpi=my_dpi)
Комментарии:
1. Это связано с тем, что вы используете bbox_inches= «плотно» — если вы удалите эту строку, вы получите необходимые размеры. Если вы хотите сохранить «плотную» компоновку, вы можете пересчитать разницу.
2. @user17291930 — Я отредактировал пример, попробуйте сейчас.
3. теперь это работает. Большое спасибо!