我正在尝试将 Python 中生成的图像与文件中的图像/照片进行比较。
到目前为止,我做到这一点的最好方法是在 Matplotlib 中生成一个图形,然后将其转换为一个 numpy 数组,并将这些值与我从图像中获得的值进行比较。
我得到以下代码将 Matplotlib 图转换为具有 RGB 通道的 3D numpy 数组:
def fig2data ( fig ):
"""
@brief Convert a Matplotlib figure to a 3D numpy array with RGB channels and return it
@param fig a matplotlib figure
@return a numpy 3D array of RGB values
"""
# draw the renderer
fig.canvas.draw ( )
# Get the RGBA buffer from the figure
w,h = fig.canvas.get_width_height()
buf = numpy.fromstring ( fig.canvas.tostring_rgb(), dtype=numpy.uint8 )
buf.shape = ( w, h, 3 )
return buf
问题之一 - 到目前为止我试图弄清楚的问题 - 是这个转换后的图像没有被裁剪。例如,如果我绘制一个占据所有画布的正方形,Matplotlib 会将这个烦人的框架环绕,然后将其转换并混合我的所有结果。
如何仅获取我制作的图形的数值 - 没有任何框架或轴?
或者更好的是,如果有一种更简单的方法可以比较我不知道的 NumPy/Matplotlib 中的图形和图像,请告诉我。