LoginSignup
2
3

More than 3 years have passed since last update.

【前回から続いて】Google Colaboratoryで簡単な画像処理してみました。#2

Posted at

前回に続いて画像処理を行いたいと思います。

使用環境

輪郭抽出

今回は、前回の内容を用いて輪郭抽出を行いたいと思います。
これが、今回作成したプログラムになります。

輪郭抽出
import cv2
import numpy as np
from matplotlib import pyplot as plt

src = cv2.imread(img)
#numpy配列化
pixels = np.array(src)
#グレースケール化
plt.gray()
img_gray = cv2.cvtColor(pixels, cv2.COLOR_BGR2GRAY)
#二値化
retval, img_binary = cv2.threshold(img_gray,128, 255, cv2.THRESH_BINARY)
#輪郭抽出
contours,hierarchy=cv2.findContours(img_binary,cv2.RETR_LIST, cv2.CHAIN_APPROX_NONE) 
#抽出した輪郭をオリジナルの画像に描画
img_binary = cv2.drawContours(src, contours, -1, (0,255,0), 8)
#画像の表示
fig = plt.figure()
ax1 = fig.add_subplot(111)
ax1.imshow(cv2.cvtColor(img_binary, cv2.COLOR_BGR2RGB))
ax1.axis('off')
plt.show()
plt.close()

二値化のしきい値は、画像によって任意で設定してください。

引数の解説

cv2.findContoursは、輪郭を抽出するためのOpenCVの引数です。

第二引数にcv2.RETR_LISTとすることで、全輪郭を探査することが可能になります。
また、ここの引数にRETR_EXTERNALとすることで、最も外側にある輪郭を表示することができます。

cv2.drawContoursで、抽出した輪郭を描画することができます。今回のプログラムでは、オリジナルの画像に描画しています。

-1, (0,255,0), 8の、-1はすべての輪郭の表示を表しています。この数値を変えていくと0,1などに対応する輪郭を1つずつ表示することができます。8は、このプログラムで使用した画像には、8つの輪郭が存在しました。したがって8にしています。今回の使用した画像には、-1(全描画)を含めて、0~7までの輪郭が存在しました。ここは、画像によって調整してください。(0,255,0)はBGRを表しており、今回は、輪郭を緑にして、描画しています。

2
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
3