OpenCVによる画像処理入門(円形度を求める)
2019年 01月 14日
今回は「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行ずつ実行できるのでデバッグにありがたい。
どうやら違いそう。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]],
[[ 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