gpt4 book ai didi

python - 使用 matplotlib 在图像数据之上对线网格进行像素精确定位

转载 作者:太空宇宙 更新时间:2023-11-03 20:55:39 30 4
gpt4 key购买 nike

我试图将 1 像素宽线的网格精确地覆盖在 python 库 matplotlib 显示的图像网格顶部。

不幸的是,我似乎无法对结果进行足够精细的控制,以实现线网格与数据网格的正确对齐,如下面的代码所示。结果似乎总是很接近,但并不完全正确。

我尝试过使用 imshowpcolormesh 函数,但两种方法都遇到了问题。

imshow 方法:

import matplotlib.pyplot as plt
import numpy as np

size = 60
border = 5

#create test data for image and ticks location
im = np.zeros(shape=(size,size),dtype=np.float32)
ticks = np.arange(size)+0.5

#create test checkerboard pattern outside of border area
for index in range(size-2*border):
im[border+index,border:-border] += index % 2
for index in range(size-2*border):
im[border:-border,index+border] -= index % 2
im = np.abs(im)

#display image with imshow
plt.imshow(im, interpolation='nearest', cmap='binary', vmin=0, vmax=1)
ax = plt.gca()
ax.set_xticks(ticks)
ax.set_xticklabels([])
ax.set_yticks(ticks)
ax.set_yticklabels([])
ax.grid(color='r', linestyle='-', linewidth=1)
#sometimes line is off by 1 pixel
plt.show()

我希望红线的线网格能够精确地覆盖数据网格的棋盘图案,但它们偏离了一个像素。

此缩放图像显示了结果,并且偏移量很容易看到:

red_mesh_offset_by_one_pixel

我还尝试使用pcolormesh和edgecolor(使用与上面相同的数据):

plt.pcolormesh(im, cmap='binary', vmin=0, vmax=1, edgecolors='r', linewidth=0.005)
plt.show()

这里红线网格对齐得更好,但线宽不一致,有时是 1 像素宽,有时是 2 像素宽,如下图所示: red_mesh_inconsistent_line_width

理想情况下,我希望始终获得 1 像素宽的线。可以使用线宽参数,但如果我将其设置得太小,那么线条开始具有 0 像素宽度,并且它们完全消失,而且我不太明白线宽的单位是什么。

总之,如果有任何关于如何实现定位(红线网格,不偏离黑白棋盘)和线宽(屏幕上始终恰好是 1 像素宽)一致性的建议,我将不胜感激。

最佳答案

哦,好吧,我想我会回答我自己的问题。这是基于反复试验的结果,因此我不确定它是否普遍有效,但我希望这些信息对某人有用。

我能够使用下面的代码一致地绘制宽度恰好为 1 像素的 pcolormesh 网格,其中 my_dpi 需要精确设置为 dpi 分辨率显示屏imsize_pixel_ximsize_pixel_y 是绘图窗口所需的大小。

my_dpi = 96.0
imsize_pixel_x = 800
imsize_pixel_y = 600

plt.figure(figsize=(imsize_pixel_x/my_dpi, imsize_pixel_y/my_dpi), dpi=my_dpi)
plt.pcolormesh(im, cmap='binary', vmin=0, vmax=1, edgecolors='r', linewidth=my_dpi/(1024*32))

plt.show()

关于python - 使用 matplotlib 在图像数据之上对线网格进行像素精确定位,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56054752/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com