はじめに
クラウド開発環境PaizaCloudクラウドIDE(ここからはPaizaCloudと書きます)でHello Worldをシリーズで書いています。今回はOpenCVを試してみます。
PaizaCloudでは初期状態でいろいろなプログラミング言語やライブラリが利用可能になっていますが、OpenCVもPythonで利用可能になっていましたので取り上げました。
もし、実際にPaizaCloudで実際に試す場合は以下等を参照して下さい。
クラウド開発環境PaizaCloudクラウドIDEのすすめ
クラウド開発環境PaizaCloudクラウドIDEでHello World(Python編)
OpenCVとは
OpenCV(Open Source Computer Vision Library)は画像処理を行うためのオープンソースライブラリです。PythonやC++から簡単に利用でき、世界中で研究から実務まで幅広く活用されています。
画像処理の流れは大きく言えば以下のようになります。
- 前処理(グレースケール化、二値化、ノイズ除去など)
- 解析(輪郭抽出、特徴量検出など)
- 応用(顔認識、物体検出、ロボット制御など)
以上のようなステップを踏むことが多く、OpenCVはそのための部品を大量に提供しているライブラリです。
つまり「一発で魔法のように結果を出すもの」ではなく、組み合わせて目的に合わせた処理を作っていく道具の集まり(ライブラリ)だと言えます。
今回の前提について
本記事では画像処理の理論そのものは扱いません。(※というか私ではうまく説明出来ません。)あくまで「入力 → ライブラリで処理 → 出力」という流れを体験することを目的にしています。今回は前処理をいくつか試してみます。
ただし、画像処理の世界は線形代数や信号処理などの基礎の上に成り立っています。
その理論を少しずつ理解していくと、ライブラリを「道具」として使うだけでなく、
状況に応じて正しく選び、応用できる力につながります。(※ほぼ自分に向けて言っています。)
あと、今回のPaizaCloudの環境ではコンソールベースなので画像のGUI表示が出来ません。そのため処理結果は全て画像ファイルとして保存してその画像ファイルを見ます。
OpenCVでのHello World
バージョンの確認
import cv2
print("OpenCV version")
print(cv2.__version__)
ここから画像処理の前処理にあたる処理をいくつか試します。
グレースケール変換
まずはカラー画像をグレースケールに変換して保存してみます。
カラーをグレーに。赤≈76、青≈29、緑≈150、背景は255(白)くらいの濃度になります。
import cv2
# 画像を読み込み
img = cv2.imread("tora1.jpg")
# グレースケールに変換
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
# 保存
cv2.imwrite("tora1_gray.jpg", gray)
print("グレースケール画像を保存しました。")
PaizaCloudでは出力の画像ファイルをダブルクリックしてブラウザ上に表示するか、画像ファイルの右クリックからのダウンロードで確認出来ます。
左側が元の画像で右側がグレースケールに変換した結果です。二値化とぼかし
二値化は輪郭抽出の前処理として扱いやすい形です。
ガウシアンぼかしは、ノイズや細かいディテールをなめらかにする処理の一つです。
いずれも前項のグレースケール画像を入力としています。
import cv2
# グレースケール画像を読み込み
gray = cv2.imread("tora1_gray.jpg", cv2.IMREAD_GRAYSCALE)
# 二値化(しきい値128を境に白黒に分ける)
_, binary = cv2.threshold(gray, 128, 255, cv2.THRESH_BINARY)
# ガウシアンぼかし
# 5×5のガウス分布カーネルで画像を平滑化し、ノイズを抑える
blur = cv2.GaussianBlur(gray, (5,5), 0)
# 保存
cv2.imwrite("tora1_binary.jpg", binary)
cv2.imwrite("tora1_blur.jpg", blur)
print("二値化画像とぼかし画像を保存しました。")
まとめ
今回はOpenCVでのHelloWorldとして画像処理の前処理の流れを試してみました。確かに画像処理をしているけど次の段階の解析・応用にどうつながるかということになるので、以下の次回にそのあたりへ進んでみます。
クラウド開発環境PaizaCloudクラウドIDEでHello World(OpenCV編 その2)
ありがとうございました。