findcontoursの輪郭認識の動きを見えるようにしたらキモかった

opencvのfindcontoursの動きを一個一個見てみたかっただけです。

輪郭検出と輪郭内面積・重心計算 | OpenCV画像解析入門

↑参考にしたやつ

 

輪郭が格納されている?countoursの中身がこんな感じだったので、 順番に青い線で結んでいってみました。

f:id:alakialaca:20160520220107p:plain

 円とかを表現しようとしたら頂点が多いので、たくさん端点が出来るってことなのかな?

 

 

ちゃんと輪郭をなぞっていっているのがわかります。

なんか、虫が這いずり回っているみたい。

 

 

 

# -*- coding:utf-8 -*-

import cv2
import sys

imgFile = sys.argv[1]
img = cv2.imread(imgFile)
#ガウシアンフィルタ,ノイズ除去
img = cv2.GaussianBlur(img, (5, 5), 0)
#cannyにより エッジか、そうでないかの二値画像になる。
kani = cv2.Canny(img, 0, 50, apertureSize=5)
cv2.imshow("canny",kani)
cv2.waitKey()
#各輪郭countours 要素hierarchy
#RETR_LIST すべての輪郭を抽出
#CHAIN_APPROX_SIMPLE 水平・垂直・斜めの線分を圧縮したやつの端点
contours ,hierarchy = cv2.findContours(kani, cv2.RETR_LIST, cv2.CHAIN_APPROX_SIMPLE)
for a in range(0,len(contours)):
    print contours[a]
    print "******"
    for b in range(0,len(contours[a])-1):
        cv2.line(img,(contours[a][b][0][0],contours[a][b][0][1]),(contours[a][b+1][0][0],contours[a][b+1][0][1]),(200,0,0),3)
        cv2.imshow("contours",img)
        cv2.waitKey()