opencvpythonの輪郭近似は毎回間違った結果を出します

ラキブルイスラム王子

私は画像処理の初心者です。さまざまなエッジの中でネストされた形状を検出したいです。プログラムから、階層関係を通じて期待される輪郭を正常に検出できましたが、形状を検出しようとすると問題が発生します。輪郭の場合近似、cv2.approxpolyDP()インデックス番号を使用して目的の輪郭にメソッド/関数を使用していますが、毎回同じ出力「1」が生成されます。どこを間違えているのかわかりません。ご覧になり、提案してください。コードは以下に示され、検出される画像もそれらのリンクに示されています。私を助けてください...

import cv2
import numpy as np
maxx=0
original_color=cv2.imread("tri.jpg",1)
original=cv2.cvtColor(original_color,cv2.COLOR_BGR2GRAY)
#cv2.imshow("original",original)
blur=cv2.GaussianBlur(original,(5,5),0)
ret,thresh=cv2.threshold(blur,50,255,cv2.THRESH_BINARY)
edges = cv2.Canny(thresh,100,200)
image,contours,hierarchy=cv2.findContours(edges.copy(),cv2.RETR_TREE,cv2.CHAIN_APPROX_SIMPLE)
print len(contours)
##for c in range(0,len(hierarchy)) :
##    a=zip(hierarchy[c],contours[c])

for i in range(0,len(hierarchy[0])):
    if hierarchy[0][i][2]>=maxx :
         if(hierarchy[0][i][3]==(hierarchy[0][i][2]-2)):
             maxx=hierarchy[0][i][2]
             index=i
cnt=contours[index]
for c in cnt :
    peri=cv2.arcLength(c,True)
    approx=cv2.approxPolyDP(c,0.04*peri,True)
print hierarchy
print maxx
print len(approx)

cv2.drawContours(original_color,contours,index,(0,255,0),3)
cv2.imshow("Show",original_color)
cv2.waitKey()
cv2.destroyAllWindows()

検出前

検出前

正常に検出されました

正常に検出されました

api55

findContoursの結果は、ポイントのリストのリストです。これは、問題がここにあることを意味します。

cnt=contours[index]
for c in cnt :
    peri=cv2.arcLength(c,True)
    approx=cv2.approxPolyDP(c,0.04*peri,True)

ここでは、等高線(pointSのリスト)を選択してから、各ポイントをループし、1つのポイントのみでapproxPolyDPを実行します。あなたは輪郭にそれをするべきです。したがって、選択した輪郭に対してそれを実行したい場合は、次のことを行う必要があります。

cnt=contours[index]
peri=cv2.arcLength(cnt,True)
approx=cv2.approxPolyDP(cnt,0.04*peri,True)

輪郭ごとにそれを実行したい場合は、次のようにします(ループ内に印刷を保持し、そうでない場合は最後の1つのみを表示します)。

for c in contours:
    peri=cv2.arcLength(c,True)
    approx=cv2.approxPolyDP(c,0.04*peri,True)
    print len(approx)

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

私のUDPチェックサム計算は毎回間違った結果を出します

分類Dev

ステンシルバッファを使用してオブジェクトの輪郭を描くと、間違った結果が得られます

分類Dev

MySQL移動平均は間違った結果を出します

分類Dev

Math.cos()は間違った結果を出します

分類Dev

TOSVersionは間違った結果を出します

分類Dev

Math.powは間違った結果を出します

分類Dev

base64は間違った結果を出します

分類Dev

MySQLクエリは間違った結果を出します

分類Dev

php max()関数は間違った結果を出します

分類Dev

Java Stream.sorted()は間違った結果を出します

分類Dev

OpenCVfilter2dは間違った結果を出します

分類Dev

PythonのLinearRegressionが間違った結果を出しますか?

分類Dev

DATEのOracleSQL比較は間違った結果を返します

分類Dev

Scipyは行列乗算に対して間違った結果を出します

分類Dev

date-fns-timezone間違った結果を出しますか?

分類Dev

pandas str.contains()は間違った結果を出しますか?

分類Dev

Bytelandianゴールドコインは毎回間違った答えを出します

分類Dev

set_unionを2回呼び出すと、間違った結果になりました

分類Dev

Pythonはtimedeltaデータの.seconds属性で間違った結果を出します

分類Dev

GROUP BYMONTHは間違った結果をもたらします

分類Dev

Timedelta操作は間違った結果をもたらします

分類Dev

OpenMPの崩壊は間違った結果をもたらします

分類Dev

Timedeltaとの時差は間違った結果をもたらします

分類Dev

Pythonのreplace関数は間違った結果をもたらします

分類Dev

cuSparse(cusparseDcsrgemm)での行列の乗算は、間違った結果を出力します

分類Dev

File.isFileは()間違った結果を返しますか?

分類Dev

listviewonClickは間違った結果を返します

分類Dev

集計+平均は間違った結果を返します

分類Dev

SQL Like with wildcardは、特定の文字で間違った結果を返します

Related 関連記事

  1. 1

    私のUDPチェックサム計算は毎回間違った結果を出します

  2. 2

    ステンシルバッファを使用してオブジェクトの輪郭を描くと、間違った結果が得られます

  3. 3

    MySQL移動平均は間違った結果を出します

  4. 4

    Math.cos()は間違った結果を出します

  5. 5

    TOSVersionは間違った結果を出します

  6. 6

    Math.powは間違った結果を出します

  7. 7

    base64は間違った結果を出します

  8. 8

    MySQLクエリは間違った結果を出します

  9. 9

    php max()関数は間違った結果を出します

  10. 10

    Java Stream.sorted()は間違った結果を出します

  11. 11

    OpenCVfilter2dは間違った結果を出します

  12. 12

    PythonのLinearRegressionが間違った結果を出しますか?

  13. 13

    DATEのOracleSQL比較は間違った結果を返します

  14. 14

    Scipyは行列乗算に対して間違った結果を出します

  15. 15

    date-fns-timezone間違った結果を出しますか?

  16. 16

    pandas str.contains()は間違った結果を出しますか?

  17. 17

    Bytelandianゴールドコインは毎回間違った答えを出します

  18. 18

    set_unionを2回呼び出すと、間違った結果になりました

  19. 19

    Pythonはtimedeltaデータの.seconds属性で間違った結果を出します

  20. 20

    GROUP BYMONTHは間違った結果をもたらします

  21. 21

    Timedelta操作は間違った結果をもたらします

  22. 22

    OpenMPの崩壊は間違った結果をもたらします

  23. 23

    Timedeltaとの時差は間違った結果をもたらします

  24. 24

    Pythonのreplace関数は間違った結果をもたらします

  25. 25

    cuSparse(cusparseDcsrgemm)での行列の乗算は、間違った結果を出力します

  26. 26

    File.isFileは()間違った結果を返しますか?

  27. 27

    listviewonClickは間違った結果を返します

  28. 28

    集計+平均は間違った結果を返します

  29. 29

    SQL Like with wildcardは、特定の文字で間違った結果を返します

ホットタグ

アーカイブ