在大图像中, 垂直网格线在某一点停止出现。

8 浏览
0 Comments

在大图像中, 垂直网格线在某一点停止出现。

我正在使用matplotlib在图像上绘制垂直和水平的网格线。生成的图像上将有编号的方块。为了实现这个,我使用了这段代码:\n

def drawGridOverImage(image):
    """在图像上绘制带有1cm²方格的编号网格。"""
    import matplotlib.pyplot as plt
    import matplotlib.ticker as plticker
    my_dpi=300.
    # 设置图形
    fig=plt.figure(figsize=(float(image.size[0])/my_dpi,float(image.size[1])/my_dpi),dpi=my_dpi)
    ax=fig.add_subplot(111)
    # 去除图像周围的空白
    fig.subplots_adjust(left=0,right=1,bottom=0,top=1)
    # 设置网格间隔
    # my_dpi是每英寸的点数,所以每个方格是1英寸²
    myInterval=my_dpi
    loc = plticker.MultipleLocator(base=myInterval)
    ax.xaxis.set_major_locator(loc)
    ax.yaxis.set_major_locator(loc)
    # 添加网格线
    ax.grid(True, which='major', axis='both', linestyle='-')
    # 添加图像
    ax.imshow(image)
    # 计算x和y方向上的网格数
    nx=abs(int(float(ax.get_xlim()[1]-ax.get_xlim()[0])/float(myInterval)))
    ny=abs(int(float(ax.get_ylim()[1]-ax.get_ylim()[0])/float(myInterval)))
    # 在方格上添加一些标签
    for j in range(ny):
        y=myInterval/2+j*myInterval
        for i in range(nx):
            x=myInterval/2.+float(i)*myInterval
            ax.text(x,y,'{:d}'.format(i+j*nx),color='r',ha='center',va='center')
    # 保存图形
    #fig.savefig('myImageGrid.tiff',dpi=my_dpi)
    newImageName = nameImageWithGrid(image.filename)
    fig.savefig(newImageName,dpi=my_dpi)
    return fig

\n然而,当我运行这段代码时,垂直网格线在某个点停止出现。我附上了部分图像的屏幕截图(整个图像非常大)以演示问题。\n\"enter\n经过一些搜索,我找到了之前的问题,所以我不确定是否是同样的问题。值得注意的是,我正在处理非常大的图像,上面的图片尺寸为11648×8736。\n我希望能得到一些帮助,解决这个问题,并使垂直网格线在整个图像上显示出来。\n编辑:\n我在另一张大图上尝试了这段代码,可以在此链接这里找到,并且遇到了同样的问题,这是部分图像的屏幕截图,垂直网格线停止了:\n\"enter

0
0 Comments

问题出现的原因是定位器(locator)导致的。网格线是根据间隔值创建的刻度来绘制的。如果更改x轴上的刻度标记,可以正确绘制网格线。解决方法是通过注释掉loc行和ax.yaxis.set_major(loc)行来修复垂直网格线的问题,然后取消注释这两行,以使x和y刻度都设置正确。

0