从像素获取RGB值

时间:2019-01-10 02:47:37

标签: python matplotlib

我正在解决一个使用matplotlib绘制GeoTIFF图像的问题。我想实现一个函数,以便当我单击图像时,该函数必须仅使用matplotlib返回我单击的像素的RGB值。

我已经看到了Stack Overflow上提供的所有先前解决方案,但没有一个对我有用。

这是我的代码:

src = rasterio.open("rgb.tif")
src1 = rasterio.plot.reshape_as_image(src.read())
#segments = quickshift(image, ratio=1, kernel_size=20, max_dist=80,
           #return_tree=False, sigma=0, convert2lab=True, random_seed=42


def onclick(event):
    print(event)
    global ix, iy
    global area
    area = 7
    ix, iy = event.xdata, event.ydata


    print ('ix ',ix)
    print ("iy ",iy)

    #X =  '${}$'.format(ix)
    #Y =  '${}$'.format(iy)
    datacursor(bbox=dict(fc='white'),formatter="longitude:{x:.2f}\nlatitude:{y:.2f}\ncolor:{z}".format)

    return
    #print ("color ",image[int(event.xdata)][int(event.ydata)])

fig,ax = plt.subplots()
graph1 = show(src.read(), transform=src.transform , ax  = ax)
fig.canvas.mpl_connect('button_press_event', onclick)
plt.show()

1 个答案:

答案 0 :(得分:1)

假设 im = plt.imshow(data) 是您绘制的图像。然后,如果data是来自三通道tif图像的numpy数组,则坐标i,j的RGB值为data[j,i,:]。如果data是单通道图像,则将使用色图进行绘制。在这种情况下,RGB值为im.cmap(im.norm(data[j,i]))