MENU

【Python】OpenCV(cv2)の使い方を解説

この記事では、画像処理や機械学習に広く使われているPythonのライブラリであるOpenCV(cv2)の使い方を解説します。

初心者向けにOpenCVの概要や特徴、インストール方法から始め、基本操作や画像処理の応用、機械学習や深層学習との簡単な紹介まで行っているので、参考にしてみるといいでしょう。

目次から探す

OpenCVとは

OpenCVの概要

OpenCV(オープンシーヴィー)は、オープンソースのコンピュータビジョンライブラリです。

コンピュータビジョンとは、画像や動画を解析して情報を抽出する技術のことを指します。

OpenCVは、C++をベースにして開発されており、PythonやJavaなどの言語でも利用することができます。

また、Windows、macOS、Linuxなどのプラットフォームに対応しています。

OpenCVの特徴

OpenCVは、以下のような特徴があります。

  1. オープンソース: 無料で利用でき、商用利用も可能です。
  2. 多機能: 画像処理、動画解析、機械学習、ディープラーニングなど、幅広い機能を提供しています。
  3. 高速: C++で実装されているため、高速な処理が可能です。

また、OpenCLやCUDAを利用してGPUでの高速化もサポートしています。

  1. クロスプラットフォーム: Windows、macOS、Linuxなど、様々なプラットフォームで利用できます。
  2. 豊富なドキュメント: 公式ドキュメントやチュートリアルが充実しており、学習しやすいです。

OpenCVのインストール方法

PythonでOpenCVを利用するには、opencv-pythonというパッケージをインストールする必要があります。

以下の手順でインストールできます。

  1. コマンドプロンプト(Windows)またはターミナル(macOS、Linux)を開きます。
  2. 以下のコマンドを入力して、opencv-pythonパッケージをインストールします。
pip install opencv-python
  1. インストールが完了したら、PythonのインタラクティブシェルやスクリプトでOpenCVを利用できるようになります。

以下のようにインポートして使用します。


import cv2

これで、OpenCVのインストールが完了しました。

次の章では、OpenCVを使った画像処理の基本的な方法を学んでいきましょう。

cv2(OpenCV)の基本操作

OpenCVは画像処理や機械学習に関する機能が豊富に揃っているライブラリです。

ここでは、cv2(OpenCV)を使った基本的な画像操作を解説します。

なおここでは、使用する画像は以下の猫の画像を使用します。

かわいい

画像の読み込みと表示

画像ファイルの読み込み

まずは、画像ファイルを読み込んでみましょう。

cv2.imread() 関数を使って画像ファイルを読み込むことができます。


import cv2
# 画像ファイルの読み込み
img = cv2.imread("sample.jpg")

画像の表示

読み込んだ画像を表示するには、 cv2.imshow() 関数を使います。

また、 cv2.waitKey() 関数でキー入力を待ち、 cv2.destroyAllWindows() 関数でウィンドウを閉じます。


import cv2
# 画像ファイルの読み込み
img = cv2.imread("sample.jpg")
# 画像の表示
cv2.imshow("sample image", img)
# キー入力を待つ
cv2.waitKey(0)
# ウィンドウを閉じる
cv2.destroyAllWindows()

画像の保存

画像を保存するには、 cv2.imwrite() 関数を使います。

第一引数に保存するファイル名、第二引数に保存する画像データを指定します。


import cv2
# 画像ファイルの読み込み
img = cv2.imread("sample.jpg")
# 画像の保存
cv2.imwrite("saved_sample.jpg", img)

画像の基本操作

画像のリサイズ

画像のサイズを変更するには、 cv2.resize() 関数を使います。

第一引数に画像データ、第二引数にリサイズ後のサイズを指定します。


import cv2
# 画像ファイルの読み込み
img = cv2.imread("sample.jpg")
# 画像のリサイズ
resized_img = cv2.resize(img, (300, 200))
# リサイズ後の画像を表示
cv2.imshow("resized image", resized_img)
cv2.waitKey(0)
cv2.destroyAllWindows()

画像の回転

画像を回転させるには、 cv2.getRotationMatrix2D() 関数で回転行列を作成し、 cv2.warpAffine() 関数で画像を変換します。


import cv2
# 画像ファイルの読み込み
img = cv2.imread("sample.jpg")
# 画像の中心座標を取得
h, w = img.shape[:2]
center = (w // 2, h // 2)
# 回転行列の作成(中心座標、回転角度、スケール)
rotation_matrix = cv2.getRotationMatrix2D(center, 45, 1.0)
# 画像の回転
rotated_img = cv2.warpAffine(img, rotation_matrix, (w, h))
# 回転後の画像を表示
cv2.imshow("rotated image", rotated_img)
cv2.waitKey(0)
cv2.destroyAllWindows()

画像の反転

画像を反転させるには、 cv2.flip() 関数を使います。

第一引数に画像データ、第二引数に反転の方法を指定します。


import cv2
# 画像ファイルの読み込み
img = cv2.imread("sample.jpg")
# 画像の反転(水平反転)
flipped_img = cv2.flip(img, 1)
# 反転後の画像を表示
cv2.imshow("flipped image", flipped_img)
cv2.waitKey(0)
cv2.destroyAllWindows()

画像の色調整

画像の色調を変更するには、 cv2.cvtColor() 関数を使います。

第一引数に画像データ、第二引数に変換の方法を指定します。


import cv2
# 画像ファイルの読み込み
img = cv2.imread("sample.jpg")
# 画像の色調変更(グレースケール)
gray_img = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
# 色調変更後の画像を表示
cv2.imshow("gray image", gray_img)
cv2.waitKey(0)
cv2.destroyAllWindows()

画像のフィルタリング

ガウシアンフィルタ

画像にガウシアンフィルタを適用するには、 cv2.GaussianBlur() 関数を使います。

第一引数に画像データ、第二引数にカーネルサイズ、第三引数に標準偏差を指定します。


import cv2
# 画像ファイルの読み込み
img = cv2.imread("sample.jpg")
# ガウシアンフィルタの適用
blurred_img = cv2.GaussianBlur(img, (15, 15), 0)
# フィルタ適用後の画像を表示
cv2.imshow("blurred image", blurred_img)
cv2.waitKey(0)
cv2.destroyAllWindows()

メディアンフィルタ

画像にメディアンフィルタを適用するには、 cv2.medianBlur() 関数を使います。

第一引数に画像データ、第二引数にカーネルサイズを指定します。


import cv2
# 画像ファイルの読み込み
img = cv2.imread("sample.jpg")
# メディアンフィルタの適用
median_blurred_img = cv2.medianBlur(img, 5)
# フィルタ適用後の画像を表示
cv2.imshow("median blurred image", median_blurred_img)
cv2.waitKey(0)
cv2.destroyAllWindows()

ビラテラルフィルタ

画像にビラテラルフィルタを適用するには、 cv2.bilateralFilter() 関数を使います。

第一引数に画像データ、第二引数にフィルタの直径、第三引数に色空間の標準偏差、第四引数に座標空間の標準偏差を指定します。


import cv2
# 画像ファイルの読み込み
img = cv2.imread("sample.jpg")
# ビラテラルフィルタの適用
bilateral_filtered_img = cv2.bilateralFilter(img, 9, 75, 75)
# フィルタ適用後の画像を表示
cv2.imshow("bilateral filtered image", bilateral_filtered_img)
cv2.waitKey(0)
cv2.destroyAllWindows()
1 2 3

目次から探す