Pythonで簡単画像加工!OpenCVでできる画像処理入門

はじめに

画像処理といえばOpenCV(Open Source Computer Vision Library)!

Pythonで手軽に画像を加工したり、認識したりできる便利なライブラリです。
本記事では、OpenCVの基本的な使い方を紹介します。

OpenCVとは?

OpenCV(Open Source Computer Vision Library)は、コンピュータビジョンや画像処理のためのオープンソースライブラリです。C++やPythonをはじめとした複数の言語に対応しており、リアルタイム画像処理にも適しています。

OpenCVの主な機能

OpenCVには、以下のような多様な機能があります。

  1. 画像の読み込み・表示: 画像ファイルを開いたり、ウィンドウに表示したりできます。
  2. 画像の前処理: グレースケール変換、フィルタ適用、ノイズ除去などの基本処理。
  3. エッジ検出: Canny法などを用いた画像内の境界線の抽出。
  4. 形状解析: 輪郭検出、ヒストグラム解析、オブジェクト検出。
  5. 特徴点検出とマッチング: SIFTやORBを用いた特徴点の抽出と比較。
  6. 画像変換: リサイズ、回転、アフィン変換、透視変換。
  7. 色空間変換: RGB、HSV、グレースケールの相互変換。
  8. 動画処理: ビデオファイルの読み書き、カメラ入力の処理。
  9. 機械学習とAIとの連携: TensorFlowやPyTorchと組み合わせたディープラーニング応用。

このように、OpenCVは幅広い用途で利用できる強力な画像処理ライブラリです。

本記事では、OpenCVの画像加工に焦点を当てて紹介します。

やりたいこと

OpenCVを使うと、画像を自由に加工することができます。本記事では、以下のような基本的な画像加工の手法を紹介します。

1.画像の読み込みと表示
2.画像の加工(グレースケール変換、ぼかしなど)
3.画像のエッジ検出
4.画像のコントラスト・明るさ調整
5.画像のフィルタ処理
6.画像の色空間変換

準備するもの

画像処理を始めるためには、まず必要なライブラリをインストールし、作業ディレクトリを整理しておくことが大切です。ここでは、使用するライブラリとそのインストール方法、ディレクトリ構成について説明します。

ライブラリ

インポート手順

まず、OpenCVをインストールします。

pip install opencv-python

ライブラリの説明

  • opencv-python:OpenCVのメインライブラリ。画像の読み込み、変換、フィルタ処理などが可能。
  • numpy:画像データを配列として扱うために便利。

ディレクトリ構成

project/
├── images/       # 画像ファイルを保存
│   ├── sample.jpg
├── scripts/      # スクリプトを保存
│   ├── main.py

コード例

画像を読み込み、加工し、処理後の画像を保存するスクリプトを作成します。

この画像を元に、グレースケール変換やエッジ検出などの処理を行い、加工した画像を保存します。(私が撮影したものになります)

コードスクリプト

import cv2
import numpy as np
import os

# 保存先ディレクトリの作成
if not os.path.exists('images'):
    os.makedirs('images')

# 画像の読み込み
image = cv2.imread("images/sample.jpg")

# グレースケール変換
gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)

# ぼかし処理
blurred = cv2.GaussianBlur(image, (99, 99), 0)

# エッジ検出
edges = cv2.Canny(gray, 50, 150)

# コントラストと明るさの調整
adjusted = cv2.convertScaleAbs(image, alpha=1.2, beta=30)

# シャープ化
kernel = np.array([[0, -1, 0], [-1, 5, -1], [0, -1, 0]])
sharpened = cv2.filter2D(image, -1, kernel)

# 色空間変換(HSV)
hsv = cv2.cvtColor(image, cv2.COLOR_BGR2HSV)

# 画像の保存
cv2.imwrite("images/grayscale.jpg", gray)
cv2.imwrite("images/blurred.jpg", blurred)
cv2.imwrite("images/edges.jpg", edges)
cv2.imwrite("images/adjusted.jpg", adjusted)
cv2.imwrite("images/sharpened.jpg", sharpened)
cv2.imwrite("images/hsv.jpg", hsv)

print("画像の処理が完了し、imagesフォルダに保存されました。")

実行結果

処理された画像は images/ フォルダに保存されます。

コード解説

このスクリプトでは、まず sample.jpg を読み込み、複数の画像加工処理を施した後、それぞれの結果を images/ フォルダに保存します。

  1. 画像の読み込み: cv2.imread() を使用して画像をロードします。
  2. グレースケール変換: cv2.cvtColor() を用いて、カラー画像を白黒画像に変換。
  3. ぼかし処理: cv2.GaussianBlur() で画像をぼかし、ノイズを減らします。
  4. エッジ検出: cv2.Canny() を使って、画像内の輪郭を抽出。
  5. コントラストと明るさの調整: cv2.convertScaleAbs() を使用し、画像の明るさやコントラストを変更。
  6. シャープ化処理: cv2.filter2D() で画像の輪郭を強調。
  7. 色空間変換(HSV): cv2.cvtColor() を使い、画像をHSV形式に変換。

このように、OpenCVを活用すると、さまざまな画像加工が手軽に行えます。

注意点

  • cv2.imshow()を使うときは、cv2.waitKey(0) を入れないとすぐにウィンドウが閉じてしまう。
  • 画像のパスが正しく指定されているか確認する。
  • 画像サイズが大きすぎる場合、リサイズして処理することでメモリ消費を抑えられる。
  • cv2.getRotationMatrix2D() で回転するとき、元画像サイズを考慮しないと意図しない切り抜きが発生する。

まとめ

本記事では、OpenCVを使って画像を読み込み、加工し、表示する基本的な手順を解説しました。さらに、画像のリサイズや回転、コントラスト調整、シャープ化など詳細な加工方法を追加し、より実践的な内容にしました。

OpenCVを活用すると、画像認識や物体検出など高度な処理も可能になりますので、ぜひ試してみてください!

コメント

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