Python 在图形上画一个椭圆并获得坐标

Python 在图形上画一个椭圆并获得坐标,python,get,coordinates,roi,Python,Get,Coordinates,Roi,我正在研究Python2.7。我必须在图片上定义一些感兴趣的区域(AoI)。基本上,我试图在图片的特定部分绘制一个椭圆(或更多),并获得其轮廓的坐标(x;y)。我想将这些坐标保存在一个文件中,以便以后使用它们来查看我的数据是否在该区域内 这是我的代码: import matplotlib.pyplot as plt import numpy as np from matplotlib.patches import Ellipse, Circle from matplotlib.path impo

我正在研究Python2.7。我必须在图片上定义一些感兴趣的区域(AoI)。基本上,我试图在图片的特定部分绘制一个椭圆(或更多),并获得其轮廓的坐标(x;y)。我想将这些坐标保存在一个文件中,以便以后使用它们来查看我的数据是否在该区域内

这是我的代码:

import matplotlib.pyplot as plt
import numpy as np
from matplotlib.patches import Ellipse, Circle
from matplotlib.path import Path

# Get an example image

img = imread('sposa.png')

# Create a figure. Equal aspect so circles look circular
fig,ax = plt.subplots(1)
ax.set_aspect('equal')

# Show the image
ax.imshow(img)
ax.set_xlim(0,1600)
ax.set_ylim(0,1200)
# Now, loop through coord arrays, and create a circle at each x,y pair
ellipse = Ellipse((1000, 400), width=400, height=100, edgecolor='white',facecolor='none',linewidth=2)

ax.add_patch(ellipse)
path = ellipse.get_path()

# Show the image
plt.show()
当我运行代码时,我得到了以下结果(这正是我想要的):

但是,当我打印路径以检查它时,我会得到以下输出,它(我想)只与椭圆相关

Path(array([[ 0.        , -1.        ],
   [ 0.2652031 , -1.        ],
   [ 0.51957987, -0.89463369],
   [ 0.70710678, -0.70710678],
   [ 0.89463369, -0.51957987],
   [ 1.        , -0.2652031 ],
   [ 1.        ,  0.        ],
   [ 1.        ,  0.2652031 ],
   [ 0.89463369,  0.51957987],
   [ 0.70710678,  0.70710678],
   [ 0.51957987,  0.89463369],
   [ 0.2652031 ,  1.        ],
   [ 0.        ,  1.        ],
   [-0.2652031 ,  1.        ],
   [-0.51957987,  0.89463369],
   [-0.70710678,  0.70710678],
   [-0.89463369,  0.51957987],
   [-1.        ,  0.2652031 ],
   [-1.        ,  0.        ],
   [-1.        , -0.2652031 ],
   [-0.89463369, -0.51957987],
   [-0.70710678, -0.70710678],
   [-0.51957987, -0.89463369],
   [-0.2652031 , -1.        ],
   [ 0.        , -1.        ],
   [ 0.        , -1.        ]]), array([ 1,  4,  4,  4,  4,  4,  4,  4,  4,  4,  4,  4,  4,  4,  4,  4,  4,
    4,  4,  4,  4,  4,  4,  4,  4, 79], dtype=uint8))
但是,我需要一个椭圆相对于图片像素的坐标列表(1600 X 1200)。我可能使用了错误的函数,或者图片和椭圆不匹配

Path(array([[ 0.        , -1.        ],
   [ 0.2652031 , -1.        ],
   [ 0.51957987, -0.89463369],
   [ 0.70710678, -0.70710678],
   [ 0.89463369, -0.51957987],
   [ 1.        , -0.2652031 ],
   [ 1.        ,  0.        ],
   [ 1.        ,  0.2652031 ],
   [ 0.89463369,  0.51957987],
   [ 0.70710678,  0.70710678],
   [ 0.51957987,  0.89463369],
   [ 0.2652031 ,  1.        ],
   [ 0.        ,  1.        ],
   [-0.2652031 ,  1.        ],
   [-0.51957987,  0.89463369],
   [-0.70710678,  0.70710678],
   [-0.89463369,  0.51957987],
   [-1.        ,  0.2652031 ],
   [-1.        ,  0.        ],
   [-1.        , -0.2652031 ],
   [-0.89463369, -0.51957987],
   [-0.70710678, -0.70710678],
   [-0.51957987, -0.89463369],
   [-0.2652031 , -1.        ],
   [ 0.        , -1.        ],
   [ 0.        , -1.        ]]), array([ 1,  4,  4,  4,  4,  4,  4,  4,  4,  4,  4,  4,  4,  4,  4,  4,  4,
    4,  4,  4,  4,  4,  4,  4,  4, 79], dtype=uint8))
我应该得到这样的结果(这是之前实验的一个例子):

有人能帮我吗? 提前谢谢大家,,
R

路径数组似乎是一个粗略的标准化圆-我将忽略它

您已经有椭圆信息了
椭圆=椭圆((1000400),宽度=400,高度=100,…)

我只需要根据
椭圆((1000400),宽度=400,高度=100)中的前几个数字做一个sin,cos参数化椭圆,如果你想明确地画一个高分辨率椭圆,这些数字是中心点和轴的长度


对于成员资格测试
(x-x\u 0)^2/a^2+(y-y\u 0)^2/b^2您应该使用
椭圆。获取路径()。顶点
,但是它不在正确的坐标系中。若要对其进行变换,请对其应用
椭圆。获取面片变换()。变换
。请参见下面的工作示例

导入matplotlib.pyplot作为plt
从matplotlib.patches导入椭圆
从matplotlib.path导入路径
从matplotlib.patches导入PathPatch
img=plt.imread(“image.jpg”)
图,ax=plt子批次(1)
ax.set_方面(“相等”)
ax.imshow(img)
#创建基础椭圆
椭圆=椭圆((300300),宽度=400,高度=100,
edgecolor='白色',facecolor='无',线宽=2)
#找到路
路径=椭圆。获取路径()
#获取路径顶点列表
顶点=路径。顶点。复制()
#变换顶点,使其具有正确的坐标
顶点=椭圆。获取_面片_变换()。变换(顶点)
#然后,您可以将顶点数组保存到一个文件:csv、pickle…由您决定
plt.show()

谢谢。我不确定您的解决方案cal如何帮助我找到椭圆坐标。我尝试实现它,但没有成功。您能给我举个例子吗?没错!谢谢!