Python OpenCVにおける輪郭(領域)

輪郭: 初めの一歩より
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
import cv2
import numpy as np
from matplotlib import pyplot as plt
 
img = cv2.imread('pic.png')
#cv2.imshow('img',img)
#cv2.waitKey(0)
 
imgray = cv2.cvtColor(img,cv2.COLOR_RGB2GRAY)
#cv2.imshow('imgray',imgray)
#cv2.waitKey(0)
 
ret,thresh = cv2.threshold(imgray,127,255,0)
#cv2.imshow('thresh',thresh)
#cv2.waitKey(0)
 
image,contous = cv2.findContours(thresh,cv2.RETR_TREE,cv2.CHAIN_APPROX_SIMPLE)
#cv2.imshow('image',contous)
#cv2.waitKey(0)
 
 
 
img = cv2.drawContours(img,image,-1,(0,255,0),3)
cv2.imshow('img',img)
cv2.waitKey(0)
 
cv2.destroyAllWindows()

動いたが、正直良くわからない。
ここで画像を取り込んで、グレイに変換
1
2
im = cv2.imread('test.jpg')
imgray = cv2.cvtColor(im,cv2.COLOR_BGR2GRAY)

ここで2値化
1
ret,thresh = cv2.threshold(imgray,127,255,0)

ここで輪郭抽出
1
image, contours, hierarchy = cv2.findContours(thresh,cv2.RETR_TREE,cv2.CHAIN_APPROX_SIMPLE)

cv2.findContours() 関数は3個の引数を必要とする関数です.第1引数は入力画像,第2引数はcontour retrieval mode,第3引数は輪郭検出方法を指定するフラグです.出力は輪郭画像,輪郭,輪郭の階層情報です. 輪郭 は検出された全輪郭をPythonのlistとして出力されます.list内の各輪郭は輪郭上の点の(x,y)座標をNumpyのarrayとして保存されています
ここで、輪郭の表示
1
img = cv2.drawContours(img,image,-1,(0,255,0),3)

検出した輪郭を描画するには cv2.drawContours 関数を使います.この関数は境界上に点を持つ形状であれば,輪郭以外の形状の描画にも使えます.第1引数は入力画像,第2引数はPythonのlistとして保存されている輪郭,第3引数は描画したい輪郭のインデックス(第2引数で与えた輪郭のlistから一つの輪郭だけを描画する時に描画したい輪郭の指定に使います.全輪郭を描画する時はー1を指定します.),以降の引数は輪郭を描画する色や線の太さといった情報です.

コメント

このブログの人気の投稿

Python OpenCVとWebカメラでバーコードリーダー

VB.net Dictionaryクラスの初期化