通过图像python matplotlib的两个点画一条线

时间:2014-03-14 07:34:01

标签: python image matplotlib plot

我有一个图像,我使用pyfits加载到2D数组中。我想通过图像上的两个像素绘制一条线,并使用添加的新线(而不是绘图)保存它。在此之后,我想绘制一条垂直于前一行的线条,颜色不同。使用matplotlib实现这一目标的最佳方法是什么?我用PIL试过了。我无法做到这一点。请查看代码并建议我这样做的方法。我也附上了图片

def plotAxes(map, angle, x_centroid, y_centroid):
    hor = math.floor(x_centroid + 20*(math.cos(angle)))
    ver = math.floor(y_centroid - 20*(math.sin(angle)))
    hor1 = math.floor(x_centroid + 20*(math.cos(angle+90.0)))
    ver1 = math.floor(y_centroid - 20*(math.sin(angle+90.0)))
    map_height = len(map)
    map_width = len(map[0])
    point = [ver, hor]
    center = [y_centroid, x_centroid]
    Max = np.max(map)
    array = np.zeros((map_height, map_width), int)
    for i in range(0, map_height):
        for j in range(0, map_width):
            array[i][j] = (math.floor((float(map[i][j])/float(Max))*255))
    im = Image.fromarray(np.uint8(array))
    draw = ImageDraw.Draw(im) 
    draw.line((x_centroid,y_centroid, hor,ver  ), fill="red")
    draw.line((x_centroid,y_centroid, hor1,ver1  ), fill="red")
    im.show()

但是上面的代码似乎并没有垂直打印线条。角度看起来是120而不是90.

enter image description here

1 个答案:

答案 0 :(得分:1)

抱歉。我犯了一个错误,将角度传递给Sin和cos度数。我通过弧度,它工作。三江源

angle = (angle * math.pi)/180
hor = math.floor(x_centroid + 20*(math.cos(angle)))
ver = math.floor(y_centroid - 20*(math.sin(angle)))
hor1 = math.floor(x_centroid + 20*(math.cos(angle+ (math.pi)/2)))
ver1 = math.floor(y_centroid - 20*(math.sin(angle+(math.pi)/2)))