Python 在图形上画一个椭圆并获得坐标
我正在研究Python2.7。我必须在图片上定义一些感兴趣的区域(AoI)。基本上,我试图在图片的特定部分绘制一个椭圆(或更多),并获得其轮廓的坐标(x;y)。我想将这些坐标保存在一个文件中,以便以后使用它们来查看我的数据是否在该区域内 这是我的代码: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
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如何帮助我找到椭圆坐标。我尝试实现它,但没有成功。您能给我举个例子吗?没错!谢谢!