第 1 章: OpenCV の入門
OpenCV は、Intel の Gary Bradski によって 1999 年に開始されたオープンソースのコンピュータ ビジョン ライブラリです。OpenCV ライブラリは C および C++ で書かれており、コンピューター ビジョンのさまざまな分野の 500 以上の関数をカバーしており、複数のオペレーティング システム上で実行できます。開発者がビジョン システムを迅速に構築できるように、簡潔で効率的なインターフェイスを提供することを目的としています。
この章では主にOpenCVの簡単な使い方を紹介します。
画像処理の基本操作:
画像処理の最も基本的な操作には次のようなものがあります。
- 画像を読む
- 表示画像
- 画像を保存
1. 画像を読み取ります。
OpenCV の cv2.imread() 関数を使用して、さまざまな静的画像形式をサポートする画像を読み取ります。
構文は次のとおりです: retval = cv2.imread( filename[, flags] )
- retval: 戻り値、読み取った画像。画像が読み込まれなかった場合は None を返します
- filename: 読み取るイメージのフルパスを示します。
- flags: 読み取りフラグです。このフラグは、次の表に示すように、読み取りファイルのタイプを制御するために使用されます。
注: 表の最初の列と 3 列目のパラメータは同等です。つまり: cv2.IMREAD_UNCHANGED = -1
価値 | 意味 | 価値 |
---|---|---|
cv2.IMREAD_UNCHANGED | 元の形式を変更せずに維持する | -1 |
cv2.IMREAD_GRAYSCALE | 画像のサイズをシングルチャネルのグレースケール画像に変更します | 0 |
cv2.IMREAD_COLOR | 画像のサイズを 3 チャネル BGR 画像に変更します。この値はデフォルトです | 1 |
cv2.IMREAD_ANYDEPTH | 読み込んだ画像の深度が 16 ビットまたは 32 ビットの場合は、対応する深度の画像を返し、それ以外の場合は 8 ビット画像に変換します | 2 |
cv2.IMREAD_ANYCOLOR | 可能な任意のカラー形式で画像を読み取ります | 4 |
cv2.IMREAD_LOAD_GDAL | gdalドライバーを使用してイメージをロードします | 8 |
cv2.IMREAD_REDUCED_GRAYSCALE_2 | 画像をシングルチャンネルのグレースケール画像に変換し、画像サイズを 1/2 に縮小します。 | |
cv2.IMREAD_REDUCED_COLOR_2 | 画像を3チャンネルBGRカラー画像に変換し、画像サイズを1/2に縮小します | |
cv2.IMREAD_REDUCED_GRAYSCALE_4 | 画像をシングルチャンネルのグレースケール画像に変換し、画像サイズを 1/4 に縮小します。 | |
cv2.IMREAD_REDUCED_COLOR_4 | 画像を3チャンネルBGRカラー画像に変換し、画像サイズを1/4に縮小します | |
cv2.IMREAD_REDUCED_GRAYSCALE_8 | 画像をシングルチャンネルのグレースケール画像に変換し、画像サイズを 1/8 に縮小します。 | |
cv2.IMREAD_REDUCED_COLOR_8 | 画像を3チャンネルBGRカラー画像に変換し、画像サイズを1/8に縮小します | |
cv2.IMREAD_IGNORE_ORIENTATION | EXIFの方向をマーカーとして使用せずに画像を回転します |
関数 cv2.imread() は、さまざまなタイプの画像の読み取りをサポートしています。
例: cv2.imread() 関数を使用して画像を読み取ります。
import cv2
lena = cv2.imread("sky.png")
print(lena)
2. 画像を表示します。
OpenCV では、いくつかの表示関連関数が提供されています。
-
名前付きウィドウ関数:
-
指定された名前のウィンドウを作成するために使用されます
-
文法形式: None = cv2.namedWindow( winname ) ここで、 winname は作成されたウィンドウの名前を指します。
たとえば、lesson という名前のウィンドウを作成します。CV2.namedWindow("lesson")
-
imshow関数:
- 画像を表示するために使用されます
- 構文形式: None = cv2.imshow( winname, mat ) ここで、 winname はウィンドウの名前、 mat は表示されるイメージです。
例えば:
import cv2 lena = cv2.imread("lena.bmp") cv2.namedWindow("lesson") cv2.imshow("lesson", lena)
上記のコードでは、まず cv2.imread() 関数を通じてイメージ lena.bmp を読み取り、次に cv2.namedWindow() 関数を通じてレッスンという名前のウィンドウを作成し、最後に cv2.imshow を通じてレッスン ウィンドウにイメージを表示します。 () 関数 lena.bmp。
注: 実際の使用では、次のようにウィンドウを作成せずに、関数 cv2.imshow() を使用して存在しない作成スペースを参照し、その中に指定された画像を表示することも可能です。
import cv2 lena = cv2.imread("lena.bmp") cv2.imshow("demo", lena)
-
waitKey 関数:
- キーを待機するために使用され、ユーザーがキーボードを押すとステートメントが実行され、値が返されます。
- 構文: retval = cv2.waitKey([遅延])
- retval: 戻り値を示します。キーが押されていない場合は -1 を返し、キーが登録されている場合はキーの ASCII コードを返します。
- 遅延: キーボードトリガーを待つ時間を示します。単位はミリ秒です。値が負または 0 の場合、無限に待機することを意味します。デフォルトは0です
実際の使用では、cv2.waitKey()関数を通じて押されたキーを取得し、キーごとに異なる応答を行うことでインタラクティブな機能を実現します。
import cv2 lenam = cv2.imread("lena.png") cv2.imshow("demo", lena) key = cv2.waitKey() if key == ord("A"): CV2.imshow("PressA", lena) elif key == ord("B"): cv2.imshow("PressB", lena)
-
destroyWindow 関数:
- 指定したウィンドウを解放(破棄)するために使用されます。
- 構文: None = cv2.destroyWindow( winname ) winname はウィンドウ名です。
import cv2 lena = cv2.imread("lena.png") cv2.imshow("demo", lena) cv2.waitKey() cv2.destroyWindow("demo")
-
destroyAllWindows 関数
- すべてのウィンドウを解放(破壊)するために使用されます
- 構文: なし = cv2.destroyAllWindows()
import cv2 lena = cv2.imread("lena.png") cv2.imshow("demo1", lena) cv2.imshow("demo2", lena) cv2.waitKey() cv2.destroyAllWindows()
3. 画像を保存する
OpenCV の関数 cv2.imwrite() を使用してイメージを保存します。この関数の構文は次のとおりです。
- retval = cv2.imwrite( ファイル名 , img [, params ])
パラメータ:
- retval: 戻り値。保存が成功した場合は True、失敗した場合は False を返します。
- filename: 保存するターゲットファイルのフルパス。
- img: 保存する画像
- params: 保存タイプのパラメータ、オプション。
import cv2
lena = cv2.imread("lena.png")
r = cv2.imwrite("result.png", lena)
OpenCV コントリビューション ライブラリの紹介
現在、OpenCV ライブラリは次の 2 つの部分で構成されています。
- OpenCV メイン ライブラリ: 一般的にインストールされる OpenCV ライブラリ。成熟していて安定しており、コア OpenCV チームによって維持されています。
- OpenCV コントリビューション ライブラリ: 拡張ライブラリの名前は opencv_contrib で、主にコミュニティによって開発および保守されており、メインの OpenCV ライブラリよりも包括的なビジュアル アプリケーションが含まれています。OpenCV Contributed Library には、OpenCV によってライセンスされていない部分と、特許で保護されたアルゴリズムが含まれていることに注意してください。したがって、このモジュールを使用する前に特別な注意を払う必要があります。
- OpenCV コントリビューション ライブラリには、多くの拡張モジュールが含まれています。
- bioinspired: 生物学的視覚モジュール
- データセット:データセット読み取りモジュール
- dnn: ディープ ニューラル ネットワーク モジュール
- 顔: 顔認識モジュール
- matlab: MATLAB インターフェイス モジュール
- ステレオ: 両眼ステレオマッチングモジュール
- text: ビジュアルテキストマッチングモジュール
- 追跡: ビジョンベースのターゲット追跡モジュール
- ximgpro: 画像処理拡張モジュール
- xobjdetect: 強化された 2D オブジェクト検出モジュール
- データセット:データセット読み取りモジュール
- dnn: ディープ ニューラル ネットワーク モジュール
- 顔: 顔認識モジュール
- matlab: MATLAB インターフェイス モジュール
- ステレオ: 両眼ステレオマッチングモジュール
- text: ビジュアルテキストマッチングモジュール
- 追跡: ビジョンベースのターゲット追跡モジュール
- ximgpro: 画像処理拡張モジュール
- xobjdetect: 強化された 2D オブジェクト検出モジュール
- xphoto: コンピューテーショナル フォトグラフィー拡張モジュール