どうも!こんにちは!
今画像認識を行なっています。今回は丸太の輪郭抽出です。
モジュールのバージョン
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")
次のような白黒画像が出てくると思います。
ここから丸太の輪郭を検出していきます。検出した際には輪郭を白い線で塗り潰していきます。
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()
これで木材の輪郭を抽出することができます。が、ここで問題なのが全体的な輪郭の取得に差があることです。これをパラメーターを使うことで調整をしていくことになります。
その記事はまた後日追加していきます。