Raspberry Pi 3にOpenCV 3.1のインストール」でRaspberry Pi 3でOpenCV 3.1をインストールしましたが、OpenCV 3.1を使って画像処理を行います。

画像処理プログラムの作成

対象となる画像をグレースケールに変換し、閾値処理により画像セグメンテーションを行います。

  • 6行目のimreadメソッドで画像を読み込みます。OpenCVでは、画像は3次元のNumPy配列で表されています。1つ1つの画像は、ピクセルの行列で構成され、各ピクセルはその色を表す値の配列によって表現します。OpenCVの場合、画像はBGRフォーマットで読み込まれる初期設定となっていますが、Matplotlibの場合はRGBで読み込まれます。
  • 9行目のcvtColorメソッドで画像をグレースケールに変換します。グレースケール画像は、最も暗い色(黒)を表す0、最も明るい色(白)を表す255により、ピクセルの明るさを表現する256階調のスケールで、1つの色チャンネルしか持っていない2次元の配列で示します。
  • 12行目のthresholdメソッドで、ピクセルのチャンネル値がある閾値を超えた場合は、画像の各ピクセルを白いピクセルに、超えなかった場合は、黒いピクセルに置き換える閾値処理を実行します。閾値処理は画像セグメンテーションの一番簡単な方法で、興味のある特徴ごとに分割し、画像情報を集め、分析を容易にします。
  • 15行目のimwriteメソッドで、作成した画像を保存します。

imgproc.py

import cv2, matplotlib
import numpy as np
import matplotlib.pyplot as plt

# read an image
img = cv2.imread('images/yokohama.jpg')
 
# convert image to grayscale
gray_img = cv2.cvtColor(img, cv2.COLOR_RGB2GRAY)
 
# threshold for image, with threshold 80
_, threshold_img = cv2.threshold(gray_img, 80, 255, cv2.THRESH_BINARY)
 
# write grayscale img
cv2.imwrite('images/yokohama_gray.jpg', threshold_img)

# show image
threshold_img = cv2.cvtColor(threshold_img, cv2.COLOR_GRAY2RGB)
plt.imshow(threshold_img)
plt.show()

画像処理プログラムの実行

作成した画像処理プログラム「imgproc.py」を次のコマンドで実行します。

$ python3 imgproc.py

元の画像を次に示します。

画像処理プログラム「imgproc.py」を使って、画像処理した画像を次に示します。