OpenCV-Pythonチートシート:画像のインポートから顔検出まで



Opencv Python Cheat Sheet



-この記事では、画像のトリミング、サイズ変更、回転、しきい値処理、ぼかし、画像への描画と書き込み、顔検出、輪郭画像を使用したオブジェクト検出について説明します。



OpenCV-Pythonとは何ですか?

OpenCVは、オープンソースのコンピュータービジョンおよび機械学習ライブラリです。古典的で最先端のコンピュータービジョンや機械学習アルゴリズムなど、2500を超える最適化されたアルゴリズムがあります。 Python、Java、C ++、Matlabなどの多くの言語インターフェースがあります。



ここでは、Pythonインターフェースを扱います。

インストール

Windowsの場合は、こちらのガイドをご覧ください。アドレス:https://opencv-python-tutroals.readthedocs.io/en/latest/py_tutorials/py_setup/py_setup_in_windows/py_setup_in_windows.html



Linuxの場合は、こちらのガイドをご覧ください。アドレス:https://docs.opencv.org/trunk/d7/d9f/tutorial_linux_install.html

画像のインポートと表示

警告1:openCVを介して画像を読み取る場合、画像はRGB色空間ではなく、BGR色空間で読み取られます。これが問題にならない場合もあります。画像に色を追加したい場合にのみ問題が発生します。

2つの解決策があります:

R —最初の色の値(赤)とB — 3番目の色の値(青)を入れ替えて、赤が(255,0,0)ではなく(0,0,255)になるようにします。

色空間をRGBに変更します。

コードの処理を続行するには、画像の代わりにrgb_imageを使用してください。

警告2:画像を表示しているウィンドウを閉じるには、任意のボタンを押します。閉じるボタンを使用すると、ウィンドウがフリーズする可能性があります(これは、Jupyterノートブックでコードを実行したときに発生しました)。

簡単にするために、チュートリアル全体を通して、この方法を使用して画像を表示します。

出典:Pixabay

作物

出典:Pixabay

トリミングされた犬

その中には、image [10:500,500:200]はimage [y:y + h、x:x + w]です。

サイズを調整する

出典:Pexels

サイズを20%に調整した後

このサイズ変更機能は、元の画像のサイズ比を維持します。

その他の画像ズーム機能については、こちらをご確認ください。 (Https://www.tutorialkart.com/opencv/python/opencv-python-resize-image/)

スピン

左:ペクセルのジョナサン・マイヤーからの写真。右:180度回転した後の犬。

image.shapeは、高さ、幅、チャネルを出力します。 Mは回転行列で、画像を中心を中心に180度回転します。

-veは画像を時計回りに回転させる角度を意味し、+ ve逆は画像を反時計回りに回転させる角度を意味します。

グレースケールとしきい値(白黒効果)

出典:Pexels

グレーイメージは、グレーイメージのシングルチャネルバージョンです。

このしきい値関数は、127より暗い(小さい)すべてのピクセルのシャドウ値を0に設定し、127から255より明るい(大きい)すべてのピクセルのシャドウ値を設定します。

もう一つの例:

これにより、シャドウ値が150〜10未満のすべてのピクセルと、150〜200を超えるすべてのピクセルが設定されます。

しきい値機能の詳細については、こちらを確認してください。 (Https://docs.opencv.org/3.4/d7/d4d/tutorial_py_thresholding.html)

左:グレースケールの犬。右:黒と白の犬。

ぼかし/滑らか

左:画像はPixabayからのものです。右:ぼかした後の犬。

ガウスぼかし関数は、次の3つのパラメーターを受け入れます。

最初のパラメータは、ぼかす画像です。

2番目のパラメーターは、2つの正の奇数のタプルである必要があります。それらが増加すると、ぼかし効果が増加します。

3番目のパラメーターはsigmaXとsigmaYです。左側が0の場合、内部サイズから自動的に計算されます。

ファジー関数の詳細については、こちらを確認してください。 (Https://docs.opencv.org/3.1.0/d4/d13/tutorial_py_filtering.html)

画像に長方形のボックスまたは境界線を描画します

左:画像はPixabayからのものです。右:顔に長方形のフレームがある犬。

矩形関数は5つのパラメーターを受け入れます。

最初のパラメータは画像です。

2番目のパラメーターはx1、y1-左上隅の座標です。

3番目のパラメーターはx2、y2-右下隅の座標です。

4番目のパラメーターは長方形の色です(画像のインポート方法に応じてGBR / RGB)。

5番目のパラメーターは、長方形の線幅です。

線を引く

左:画像はPixabayからのものです。右:2匹の犬が線で区切られています。

ライン関数は5つのパラメーターを受け入れます。

最初のパラメータは、描画する線が配置されている画像です。

2番目のパラメーターはx1、y1です。

3番目のパラメーターはx2、y2です。

4番目のパラメーターは線の色です(画像のインポート方法に応じてGBR / RGB)。

5番目のパラメータは線幅です。

写真にテキストを書く

左:画像はPixabayからのものです。右:2匹の犬が線で区切られています。

putText関数は、次の7つのパラメーターを受け入れます。

最初のパラメータは、テキストに書き込まれる画像です。

2番目のパラメーターは、書き込まれるテキストです。

3番目のパラメーターはx、yです。これはテキストの先頭の左下隅の座標です。

4番目のパラメーターはフォントタイプです。

5番目のパラメータはフォントサイズです。

6番目のパラメーターは色です(画像のインポート方法に応じてGBR / RGB)。

7番目のパラメーターは、テキスト行の太さです。

顔検出

残念ながら、ここでは犬の写真は見つかりませんでした:(

作成者:Pixabayからの画像:無料-写真。

detectMultiScale関数は、オブジェクトを検出するための一般的な関数です。顔カスケードと呼んでいるので、顔を検出します。

detectMultiScale関数は、次の4つのパラメーターを受け入れます。

最初のパラメータはグレースケール画像です。

2番目のパラメーターはscaleFactorです。一部の顔はカメラに近い場合があるため、背景の顔よりも大きく見えます。スケールファクターはこれを補います。

検出アルゴリズムは、移動するウィンドウを使用してオブジェクトを検出します。 minNeighborsは、現在のオブジェクトの近くで検出されるオブジェクトの数を定義し、面が検出されることを宣言します。

同時に、minsizeは各ウィンドウのサイズを示します。

2つの顔が検出されました。

輪郭-オブジェクト検出方法

カラーベースの画像セグメンテーションを使用して、オブジェクトを検出できます。

cv2.findContours&cv2.drawContoursこれらの2つの関数は、これを行うのに役立ちます。

最近、「Pythonを使用してカラーベースの画像セグメンテーションを介してオブジェクト検出を実行する」という非常に詳細な記事を書きました。輪郭について知る必要があるすべてがそこにあります。 (Https://towardsdatascience.com/object-detection-via-color-based-image-segmentation-using-python-e9b7c72f0e11)

最後に、画像を保存します

総括する

OpenCVは非常に使いやすいアルゴリズムライブラリであり、3Dモデリング、高度な画像およびビデオ編集、ビデオ内の識別されたオブジェクトの追跡、ビデオ内で特定のアクションを実行している人の分類、およびから類似したオブジェクトの検索に使用できます。画像データセット画像など

最も重要なことは、OpenCVの学習は、画像関連の機械学習プロジェクトに参加したい人にとって非常に重要です。

元の英語:https://qiniumedia.freelycode.com/vcdn/1/%E4%BC%98%E8%B4%A8%E6%96%87%E7%AB%A0%E9%95%BF%E5% 9B%BE3 / opencv-python-cheetsheet.pdf

翻訳者:良いワインは来ない