輪郭抽出

V3.0.0

In [38]:
# -*- coding: utf-8 -*-
import cv2
#Ipythonで表示用の設定
import matplotlib.pyplot as plt
%matplotlib inline

#画像読込
in_img1 = cv2.imread("pic1.png") #処理用
in_img2 = cv2.imread("pic1.png") #表示用1
in_img3 = cv2.imread("pic1.png") #表示用2

#グレイ画像へ変換
gray_img   = cv2.cvtColor(in_img1, cv2.COLOR_BGR2GRAY)
#2値化
ret,thresh = cv2.threshold(gray_img,220,255,0)
#輪郭抽出
image, contours, hierarchy = cv2.findContours(thresh, cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE)

#以下、結果の表示
print "contour num:", len(contours)
print "\nID:4の輪郭(クエッションマークの点部):\n",contours[4]

#全抽出輪郭をオーバレイ
cv2.drawContours(in_img2, contours, -1, (0,0,255), 2)

#ID=4の抽出輪郭をオーバレイ
cv2.drawContours(in_img3, contours, 4, (0,255,0), 3)

#OpenCVがBGRなのでRGBに変換
disp_in_img   = cv2.cvtColor(in_img1, cv2.COLOR_BGR2RGB)
disp_out_img1 = cv2.cvtColor(in_img2, cv2.COLOR_BGR2RGB)
disp_out_img2 = cv2.cvtColor(in_img3, cv2.COLOR_BGR2RGB)

#画像表示
plt.figure(figsize=(6,18))
plt.subplot(311)
plt.imshow(disp_in_img)
plt.subplot(312)
plt.imshow(disp_out_img1)
plt.subplot(313)
plt.imshow(disp_out_img2)
contour num: 16

ID:4の輪郭(クエッションマークの点部):
[[[102 175]]

 [[103 174]]

 [[111 174]]

 [[112 175]]

 [[112 184]]

 [[111 185]]

 [[103 185]]

 [[102 184]]]

Out[38]:
<matplotlib.image.AxesImage at 0x18b7b490>
inserted by FC2 system