Skip to content

OpenCVで画像を読み込み表示する

Posted in Python

Last updated on 2020年11月3日

ガゾウヲヒョウジ・ガゾウヲホゾン。。。にゃ

あれ?大丈夫かな?

こんにちは、エピックです。

OpenCVというライブラリをご存知でしょうか。

OpenCVとは、Intel社により開発されたオープンソースの画像処理ライブラリでありC++やPythonで利用されることが多いです。

また、最近のAIブームの脇では、「AIモデル作る必要もないんじゃない?」的な課題に対しても利用されるくらいパワフルなライブラリとなっています。

今回は、OpenCVの基本的な操作である画像の読み込み・表示・保存について記載したいと思います。

あらかじめOpenCVが動く環境は整えておいてくださいね。


画像を読み込む

OpenCVで画像を読み込む際には、cv2.imread() を利用します。

cv2.imread() に読み込みたい画像の相対パスを渡すこと画像を読み込むことができます。

パラメータを指定することができますが、必須ではなく指定がない場合は3チャンネルカラー画像として読み込まれます。

import cv2

# 画像を3チャンネルカラー(BGR)として読み込み
img = cv2.imread("test.jpg")

パラメータに 0 を指定することでグレースケールとして読み込みを行う事もできます。

import cv2

# 画像をグレースケールで読み込み
img = cv2.imread("test.jpg", 0)

ここで補足ですが、読み込んだ画像はNumpy配列であり 正確には [Height][Weight][Color] の配列として読み込みが行われています。

これは .shape を利用して確認することができます。

import cv2

# 画像を3チャンネルカラー(BGR)として読み込み
img = cv2.imread("test.jpg")

# Height(高さ) x Width(幅) x Color(色) の順 
# 例. (830, 710, 3)
print(img.shape)

グレースケールで読み込んだ場合はどうでしょうか。

グレースケールの画像は、R・G・Bを合成した画像になるため、Numpy配列の最後のカラーインデックスが消失した形状となります。

import cv2

# 画像をグレースケールで読み込み
img = cv2.imread("test.jpg", 0)

# Height(高さ) x Width(幅) の順 
# 例. (830, 710)
print(img.shape)

画像を表示する

読み込みが行えたことを確認するために読み込んだ画像を表示してみます。

画像を表示する際には、cv2.imshow() を利用します。

第一引数に表示するウィンドウ名、第二引数に読み込んだ画像を指定します。

表示の際は、自動的にウィンドウが立ち上がり、またサイズも表示する画像サイズに自動的に最適化されます。

複数のウィンドウを同時に表示することもできますが、その場合は第一引数で指定するウィンドウ名を異なったものにする必要があります。

このとき同時に用いられる関数として、cv2.waitkey() と cv2.destroyAllWindows() があります。

cv2.waitKey() はキーボード入力を処理する関数で、引数には入力待ち時間をミリ秒単位で指定します.

引数に 0 を指定することで、何か入力が行われるまで待機が行われるため、実際にはこの方法が一般的です。

cv2.destroyAllWindows() は現在までに作られた全てのウィンドウを閉じる関数です.

特定のウィンドウのみを閉じる場合は cv2.destroyWindow() に閉じたいウィンドウ名を指定する必要があります。

import cv2

# 画像を3チャンネルカラー(BGR)として読み込み
img = cv2.imread("test.jpg")

# 画像を表示する
cv2.imshow('image',img)

# キーボード入力を待つ
cv2.waitKey(0)

# すべてウィンドウを閉じる
cv2.destroyAllWindows()

こんな形で表示されるはずです。


画像を保存する

はい、OpenCVを利用した画像処理が終わったとしましょう。

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

画像を保存するには cv2.imwrite() を利用します。

第一引数に保存するファイルパス、第二引数に保存する画像を指定します。

ファイルパスにはファイル名まで含めてしまいます。

また、保存形式は .png、.jpg 等指定することができます。

個人的にはファイル名の箇所のみ format関数を利用した次の形式をよく利用します。

import cv2

# 画像を3チャンネルカラー(BGR)として読み込み
img = cv2.imread("test.jpg")

fileName = "coffee"

# 画像を保存する
# 例. coffee.pngとして保存される
cv2.imwrite("{}.png".format(fileName), img)

OpenCVは非常に簡単

以上、OpenCVを利用した画像利用の初歩についての記事でした。

OpenCVは、簡単な記述ですごいパワフルなことができるライブラリです。

今回は画像加工の部分がなくあまり納得感が無いかもしれませんが、今後バンバン記事にしていきますので期待してください。

分からないことがあればコメントやTwitter等にいただければと思います。

今回も最後までお読みいただきありがとうございまし。

では。


参考


画像を扱う(OpenCV-Python Tutorials)

今回扱った内容が記載されたOpenCV-Python Tutorialsのページです。

英語を機械的に日本語に翻訳した感じで多少読みづらいかもしれませんが情報はまとまっています

チュートリアルであり情報が不足している部分もあるため、他の有志の方々のサイトを参考にしてみてください。

とはいえ、最初に読む分には程よい分量であるためおすすめです。


Pythonで始めるOpenCV入門

Pythonでの実装をベースにまとめられた貴重なOpenCVの入門書です。

内容についても、環境のセットアップから画像処理の基本(変換、平滑化、抽出 等)過不足なく一通りの操作が解説されており個人的にすごく勉強になりました。

Kindle Unlimitedで読むことができるのですが購入し、今回も参考にさせていただいてます。

もし、PythonでOpenCVのまとまったドキュメントを探している方は手にとっても損にはならないかと思います。


Be First to Comment

コメントを残す