今日は、画像中の物体を数える方法を学びます。
画像を数えるには、コンピュータビジョンライブラリを使用する必要があります。
このチュートリアルの目的を達成するために、たくさんのライブラリが利用できます。
しかし、この記事では、非常にシンプルで簡単、そしてPythonの高レベルなライブラリである cvlib
ライブラリを使用します。
もし、まだライブラリがインストールされていない場合は、pip
コマンドを使用してインストールしてください。
Import Required Libraries 画像中のオブジェクトを数えるために必要なライブラリのインストール
オブジェクトの数を数えるためには、いくつかのモジュール/ライブラリが必要です。
以下のコードも同様です。
import cv2 import numpy as np import matplotlib.pyplot as plt import cvlib as cv from cvlib.object_detection import draw_bbox from numpy.lib.polynomial import poly |
以下のモジュールが必要です.
- OpenCV モジュール
- Numpy モジュール
- matplotlib モジュール
- Cvlib モジュール
- cvlib のオブジェクト検出と draw box サブモジュール.
- NumPy の多項式モジュールも利用します.
画像の読み込みと表示
画像を読み込むには,OpenCV ライブラリの imread
関数を利用し,パラメータとして画像名を渡します.画像は,コードファイルと同じディレクトリにあることを確認してください.
画像を表示するには、matplotlib モジュールの imshow
関数を使用します。
そのコードは以下の通りです。
1
2
3
4
5
6
|
img = cv2.imread( 'image1.jpg' )
img1 = cv2.cvtColor(img,cv2.COLOR_BGR2RGB)
plt.figure(figsize = ( 10 , 10 ))
plt.axis( 'off' )
plt.imshow(img1) plt.show() |
画面に表示される出力は以下のようになります。
1
2
|
box, label, count = cv.detect_common_objects(img)
output = draw_bbox(img, box, label, count)
|
様々なオブジェクトを囲む箱の作成
以下のコードでは、イメージ内のオブジェクトの周りにボックスを表示します。
まず最初に、detect_common_objects
関数を使用して、画像オブジェクトを渡します。
この関数は、検出されたオブジェクトの周囲に生成されるボックス、ラベル、ボックスの数を返します。
ボックスを描画するには、 draw_bbox
関数を使用し、前の関数で受け取った出力をこの関数に渡します。
1
2
3
4
5
|
output = cv2.cvtColor(output,cv2.COLOR_BGR2RGB)
plt.figure(figsize = ( 10 , 10 ))
plt.axis( 'off' )
plt.imshow(output) plt.show() |
出力画像を表示するために、再び imshow 関数を使用します。
コードは以下のとおりです。
1
|
print ( "Number of objects in this image are " + str ( len (label)))
|
画像中のオブジェクトを数える
オブジェクトの数を数えるには、作成されたラベルリストに対して len
関数を使用して生成されたラベルの数を数え、画像内で見つかったオブジェクトの数を表示します。
ここでは、この画像に対して、システムから見えるオブジェクトは17個であった。
サンプル出力
同じコンセプトで別の画像を読み込んだ結果は以下の通りです。
最初に読み込まれた画像は以下の通りです。
画像中の物体を検出すると、次のような出力が得られます。
このプログラムは、画像中に存在する4匹の犬を検出した。
まとめ
これで、任意の画像を試して、画像内にいくつの異なるオブジェクトが存在するかをチェックすることができます。
ぜひ試してみてください。
お読みいただきありがとうございました。