2017-09-21 1 views
0

私は単純な幾何学的形状を検出するJavaアプリケーションをプログラミングしています。OpenCV [Java]を使って簡単な幾何学的形状を検出

次のPythonコードを基準として使用される:私は "を抽出することができないんだ

JavaのOpenCVの方法を使用して
contours,h = cv2.findContours(thresholdedImage,1,2) 

for cnt in contours: 
    approx = cv2.approxPolyDP(cnt,0.01*cv2.arcLength(cnt,True),True) 
    print len(approx) 
    if len(approx)==5: 
     print "pentagon" 
     cv2.drawContours(img,[cnt],0,255,-1) 
    elif len(approx)==3: 
     print "triangle" 
     cv2.drawContours(img,[cnt],0,(0,255,0),-1) 
    elif len(approx)==4: 
     print "square" 
     cv2.drawContours(img,[cnt],0,(0,0,255),-1) 
    elif len(approx) == 9: 
     print "half-circle" 
     cv2.drawContours(img,[cnt],0,(255,255,0),-1) 
    elif len(approx) > 15: 
     print "circle" 
     cv2.drawContours(img,[cnt],0,(0,255,255),-1) 

How to detect simple geometric shapes using OpenCV

これは、コードの一部[Pythonの]であります(長さ)プロパティ(どの形状が検出されたかを判断するために)近似された輪郭のものです。輪郭のカップルをプリントアウト

は、[Javaの]生産: - 上記のコードから45

[ 4*1*CV_32SC2, isCont=true, isSubmat=false, nativeObj=0x23ac75f0, dataAddr=0x1c7c66c0 ] 
[ 5*1*CV_32SC2, isCont=true, isSubmat=false, nativeObj=0x23ac7200, dataAddr=0x1c0e5fc0 ] 
etc. 

私は特定の輪郭オブジェクトのポイント数を取得したいのですが。

私はそれを文字列に変換してから数値を抽出できることは分かっていますが、より良い方法が必要です。

返信いただきありがとうございます。

+0

'len'は単に' approx'配列の要素数を取得していることに注意してください。ポイント/ラインなどの「長さ」を計算するのではありません。これはJavaの '.length'のようなものです。つまり、三角形が三角形、五角形が五角形などのようなものです。 –

答えて

1

これはトリックを行う必要があります。 (既にyourImageMatOfPoint2fオブジェクトに格納されていると仮定します)。 Javaの上total()

のOpenCVの使用を参照するには

MatOfPoint2f approx = new MatOfPoint2f(); 
Imgproc.approxPolyDP(yourImage, approx, Imgproc.arcLength(yourImage, true) * 0.02, true); 
long count = approx.total(); 
if (count == 5) { 
    // this is a pentagon 
} 

チェックthisはPythonやC++のような他の言語と比べて少しトリッキーになります。

+0

これは問題を解決しました。 – user2426320

関連する問題