人気ブログランキング | 話題のタグを見る

OpenCVによる画像処理入門(円形度を求める)

今回は「OpenCVによる画像処理入門 改訂第2版」(講談社)の
P.145 8.5.4章「プログラム例:面積、周囲長、円形度」でつまづいた。

サンプルプログラムを使ってもなぜか下記でエラーとなる。
 area = cv2.contourArea(contours[0])
どうやらcontours[0]の中身がよくないらしい。

contours[0]だけを実行して中身を見てみる。
 array([[-1, -1, -1, -1]], dtype=int32)
どうやら違いそう。AnacondaのJupyter Notebookは1行ずつ実行できるのでデバッグにありがたい。

1つ前のコードである下記を確認してみる。
 contours = cv2.findContours(img_src, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)[1]

最後の[1]があやしい。[1]を消して実行後にcontours[0]を実行してみる。
 [array([[[ 62, 78]],
  [[ 62, 140]],
  [[144, 140]],

  [[144, 78]]], dtype=int32)]
それっぽいの出てきた。contours[0][0]とするとさらに中身が取り出せるので、

下記コードの最後を[1]ではなく[0]にするとプログラム全体でエラーがなくなり面積が求められた。
 contours = cv2.findContours(img_src, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)[0]


by xpe1314 | 2019-01-14 15:00 | OpenCV

多種多様な趣味で学んだことを少しずつメモっていきます。


by xpe1314