PythonとOpenCVを使って画像中のオブジェクトを数える方法

スポンサーリンク

今日は、画像中の物体を数える方法を学びます。

画像を数えるには、コンピュータビジョンライブラリを使用する必要があります。

このチュートリアルの目的を達成するために、たくさんのライブラリが利用できます。

しかし、この記事では、非常にシンプルで簡単、そして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)))
Initial Loaded Image
Initial Loaded Image

画像中のオブジェクトを数える

Output Image Counting Objects
Output Image Counting Objects

オブジェクトの数を数えるには、作成されたラベルリストに対して len 関数を使用して生成されたラベルの数を数え、画像内で見つかったオブジェクトの数を表示します。

ここでは、この画像に対して、システムから見えるオブジェクトは17個であった。

サンプル出力

同じコンセプトで別の画像を読み込んだ結果は以下の通りです。

最初に読み込まれた画像は以下の通りです。

Initial Loaded Image2
Initial Loaded Image2

画像中の物体を検出すると、次のような出力が得られます。

このプログラムは、画像中に存在する4匹の犬を検出した。

Output Image Counting Objects2
Output Image Counting Objects2

まとめ

これで、任意の画像を試して、画像内にいくつの異なるオブジェクトが存在するかをチェックすることができます。

ぜひ試してみてください。

お読みいただきありがとうございました。

タイトルとURLをコピーしました