我希望在python中填充一个900-some by 38数组。每行对应于特定轮廓,每列对应于该轮廓的特征。我想要遍历每个轮廓,并计算轮廓的区域属性,但我还没有想出最有效的方法。
我考虑过创建一个列表并为每个轮廓追加每个列值,然后尝试将所有这些列表叠加在一起,但在我看来,我不想让列表与内置函数,然后尝试使用numpy来创建数组。我甚至不确定数据结构是否兼容。
我见过的每个例子都提供了数组数据,但我想计算一个值,然后将其粘贴在一个数组中。
我的代码的基础知识如下。创建一个34D00元素的一维数组,然后重塑它是我的最佳选择吗?
cs = find_contours(Image)
print len(cs)
for c in cs:
Area = moments['m00']
features.append(Area)
Perimeter = cv2.arcLength(c,True)
# bounding box: x,y,width,height
BoundingBox = cv2.boundingRect(c)
# centroid = m10/m00, m01/m00 (x,y)
Centroid = ( moments['m10']/moments['m00'],moments['m01']/moments['m00'] )
# EquivDiameter: diameter of circle with same area as region
EquivDiameter = ny.sqrt(4*Area/ny.pi)
features.append(EquivDiameter)
# Extent: ratio of area of region to area of bounding box
Extent = Area/(BoundingBox[2]*BoundingBox[3])
# CONVEX HULL stuff
# convex hull vertices
ConvexHull = cv2.convexHull(c)
ConvexArea = cv2.contourArea(ConvexHull)
# Solidity := Area/ConvexArea
Solidity = Area/ConvexArea
因此,当我循环浏览时,我希望为每个轮廓保存区域,周长等值。
答案 0 :(得分:0)
一个选项是创建所有值的单个列表,使其成为一个numpy数组,然后重新整形数组。例如,如果您有三个轮廓,每个轮廓有三个数据点:
l = []
for i in range(9):
l.append(calculated value)
l = np.asarray(l)
l.reshape(3,3)
这允许您避免嵌套循环,但如果数据集足够大,则可能需要查看更快的选项。