画像認識 丸太の認識(opencv2)

asukaru 画像輪郭抽出
asukaru 画像輪郭抽出

 

 

どうも!こんにちは!

今画像認識を行なっています。今回は丸太の輪郭抽出です。

モジュールのバージョン

opencv-python 4.4.0.44

numpy 1.19.2

matplotlib 3.3.2

 

さて、今回使用する画像は、こちら

 

アスカル 木材の輪郭抽出
アスカル 木材の輪郭抽出

 

 

こんな感じの画像を使っていきます。

 

まずはインポートしてきます。

import cv2
import matplotlib.pyplot as plt

 

次に、cv2を使った画像の読み込みと、画像自体が大きいのでリサイズを行います。

img = cv2.imread('tikai2.jpeg')
img = cv2.resize(img, (300, 169))

 

さて、ここまで来たら毎度お馴染みの二値化をしていきます。

gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
gray = cv2.GaussianBlur(gray, (7, 7), 0)
im2 = cv2.threshold(gray, 135, 169, cv2.THRESH_BINARY_INV)[1]

 

まずはこの画像を表示させてみましょう。

 

plt.subplot(1, 2, 1)
plt.imshow(im2, cmap="gray")

次のような白黒画像が出てくると思います。

opencv2 二値化画像
opencv2 二値化画像

 

ここから丸太の輪郭を検出していきます。検出した際には輪郭を白い線で塗り潰していきます。

cnts = cv2.findContours(im2, cv2.RETR_LIST, cv2.CHAIN_APPROX_NONE)[0]

for pt in cnts:
    cv2.polylines(img, pt, True, (255, 255, 255), 3)

 

あとは、この線がひかれた画像を元の画像に合わせて表示させます。

plt.subplot(1, 2, 2)
plt.imshow(cv2.cvtColor(img, cv2.COLOR_BGRA2RGB))
plt.savefig("ctns.jpg", dpi=200)
plt.show()

 

 

これで木材の輪郭を抽出することができます。が、ここで問題なのが全体的な輪郭の取得に差があることです。これをパラメーターを使うことで調整をしていくことになります。

その記事はまた後日追加していきます。

 

コメントを残す