2017-11-20 15 views
0

ここで私のコードは(x,y)を2つに保存します。cv2.findcontours OpenCV pythonで見つかりました。pythonを使用してopencvのfindcontoursによって検出された単一の輪郭から座標を抽出する

Iは

ランダム輪郭を選択している今は、xいくつかの操作を実行するために別々のアレイで検出Y値

numpyのアレイはこのように格納されている。欲しいです

[[[ 746 997]] 
[[ 744 998]] 
[[ 742 999]] 
[[ 740 1000]]] 

私は、xの値

x = c[:,[0]] 

を抽出するために、これを使用してみましたが、私は戻って同じ配列を取得しています。

だから私はこのループ

for a in c: 
     for b in a: 
     s_x = np.append(s_x, b[0]) 
     s_y = np.append(s_y, b[1]) 

を使用して抽出しようとは、ループを通過すると、まったくこのエラーを持っていない以上のx座標を選択する簡単な方法は、ありますか?

+1

使用スクイーズ: 'c.squeeze()[:, 0]'あなたは余分な次元を持っています。 –

+1

@COLDSPEEDこれを答えに書くことはできますか?解決策は機能しました。他の人に役立つかもしれません – Santhosh

+0

あなたが提供して以来、ありがとう。あなたがそれをしている間、[それを受け入れてもらう]と考えてください(https://stackoverflow.com/help/someone-answers)。 –

答えて

2

配列には余分なディメンションがあるので、削除するだけでインデックス作成が機能するはずです。

x = c.squeeze()[:, 0] 
1
cnt = cnts[1]    # choose one 
cnt = cnt.reshape(-1,2) # change the shape 
xs = cnt[:,0]   # get xs 
+0

これでも動作します。 – Santhosh

1

あなたの配列は3次元です。細部はshape属性で見ることができます。

import numpy as np 

c = np.array([[[ 746, 997]], 
       [[ 744, 998]], 
       [[ 742, 999]], 
       [[ 740, 1000]]]) 
print(c.shape) 

(4,1,2)

シェイプを持ったら、配列をスライス。

x = c[:,0,0] 
print(x) 

[746 744 742 740]

+0

これでも動作します! – Santhosh

関連する問題