![](/img/trans.png)
[英]Python Basics: How to convert a list containing an int into a plain int?
[英]How can I convert a vector containing entries [[[int int]] …] into a vector containing entries [[int int] …] in python/numpy?
我有一個像這樣的numpy向量中的數據:
[[[1119 15]]
[[1125 27]]
[[1129 43]]
[[1131 62]]
[[1131 87]]
[[1141 234]]
...]
這些應該是可以用來代表曲線的一組點,但是每個點[int,int]似乎都封裝在另一個向量內。 IE:我有[[1 1]]而不是[1 1]。
在我給它提供一個“輪廓”之后,這個數據是由opencv函數cv2.approxPolyDP
提供給我的,我需要使用它。 我認為該函數基本上給了我它認為是一組曲線的信息,但是這里的每個曲線僅包含一個點[int int],這實際上沒有任何意義。 只有一點的曲線不是曲線,而是一點。
在這種情況下,有什么方法可以將[[int int]]轉換為[int int]?
看一下這個數組的形狀。 可能是(n, 1, 2)
。
reshape
為(n,2)
。 x.reshape(-1,2)
是一個方便的快捷方式,省去了確定n
的工作。 squeeze
也擺脫了奇異的維度。
可能這不是最佳解決方案,但您可以這樣做:
import numpy as np
# example
a = np.array( [ [[1119, 15]], [[1125, 27]], [[1129, 43]] ] )
# convert
a = np.array( [ x[0] for x in a ] )
print a
[[1119 15]
[1125 27]
[1129 43]]
編輯:
import numpy as np
a = np.array( [ [[1119, 15]], [[1125, 27]], [[1129, 143]] ] )
size = len(a)
a = a.reshape([size,2])
print a
[[1119 15]
[1125 27]
[1129 43]]
您可以檢查roxPolyDP中的第二個參數是否太大。 請注意,以下代碼並不會一直變小:
epsilon = 0.1*arcLength(contour,True)
polygon = approxPolyDP(contour, epsilon, True)
當輪廓的邊緣變得嘈雜時,由arcLength返回的輪廓的弧長可能會非常大,乘以0.1后仍會產生非常大的epsilon,從而使roxPolyDP將整個輪廓簡化為一個點。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.