2016-07-27 5 views
3

私はPythonには新しく、opencv関数で使用できるnumpy配列の作成方法はわかりません。 次のように私は、定義された2つのベクトルを持っている:opencv関数で使用するnumpy配列(等高線)を作成する

X=np.array(x_list) 
Y=np.array(y_list) 

を、結果は次のとおりです。私はOpenCVの輪郭を作成したい

[ 250.78 250.23 249.67 ..., 251.89 251.34 250.78] 
[ 251.89 251.89 252.45 ..., 248.56 248.56 251.89] 

がexで使用されます。 cv2.contourArea(contour)。私はChecking contour area in opencv using pythonを読んでいますが、私の輪郭numpy配列を正しく書くことはできません。それを行う最善の方法は何ですか?

+1

cv2輪郭が3次元のnumpy配列であるように見えます。 'contour.shape'をテストすると、その寸法を計算することができます。互換性のあるnumpy配列を作成する場合は、3次元が必要です。たとえば、 'numpy.zeros(1,2,3)'は、1x2x3の形の0の3D配列を作成します。それをテストしてみてください! – Sam

答えて

0

ここでは、テストイメージから計算された輪郭の寸法をチェックし、テスト配列を作成し、それに成功したコード例を示します。私はこれがあなたを助けることを願っています

import cv2 
import numpy as np 

img = cv2.imread('output6.png',0) #read in a test image 
ret,thresh = cv2.threshold(img,127,255,0) 
im2,contours,hierarchy = cv2.findContours(thresh, 1, 2) 

cnt = contours[0] 

print cnt.shape #this contour is a 3D numpy array 
print cv2.contourArea(cnt) #the function prints out the area happily 

#######Below is the bit you asked about 

contour = np.array([[[0,0]], [[10,0]], [[10,10]], [[5,4]]]) #make a fake array 
print cv2.contourArea(contour) #also compatible with function 
+0

あなたの答えをありがとう!私の問題は、私の入力はイメージではなく、ファイルから読み込まれた構造体の輪郭点であるというのは非常に便利です。それに基づいて輪郭点が1で、背景が0のバイナリイメージを作成します。このバイナリイメージにcv2.findContoursを適用すると、多くの輪郭を見つけることができますが、そこには1つしかないはずです。だから私は人工的にポイントから輪郭を作成したいのですが、私はどのようにこのような構造にそれらを配置するのかわかりません:contour = np.array([[0,0]]、[[10,0] ]、[[10,10]]、[[5,4]]]) – Biba

関連する問題