5-3 画像へのアクセス
imread:アプリケーションに写真を見せる魔法!
あなたのアプリケーションに、目のように画像を「見たい」と思いませんか?ここでは、 OpenCVの スーパーヒーローである imread 関数について学びます。この関数を使えば、アプリケーションはあらゆる種類の画像を簡単に読み取ることができ、後の画像処理の基礎を作ることができます!
ちょっとした準備
imread 関数を使い始める前に、アプリケーションに OpenCV モジュールを招待する必要があります。
このコードは、 OpenCV ライブラリのPython画像処理モジュール cv 2をアプリケーションに取り込みます。プログラミングを簡単にするために、通常は cvという短い名前を付けます。将来 cvを 見たときに、それが OpenCVの 機能を表していることがわかるようにするためです!
imread の "ID" と "Help"!
すべての関数には、それがどのように動作し、どのようなデータを必要とし、どのような結果を与えるかを示す、独自の「ID」と「ユーザーガイド」があります。これが imread 関数の「プロトタイプ」と、それが受け取る「パラメータ」です:
filename: str, # The file path of the image, as a string
flags: int = ... # Tells imread which mode to read the image in
# (usually optional, the default is fine)
) -> cv2.typing.MatLike: ... # What the function returns to you
戻り値:imreadは何を返すのか?
この「もの」は,画像のデータです! -> cv2.typing.MatLike:...
-
MatLike:... -> cv2.typing.MatLike:....
は,この関数が typing.MatLike 型の値を返すことを意味します.画像の読み込みに成功すると,コンピュータは MatLikeと呼ばれる特別な「言語」で画像のデータを保存します.これは,コンピュータ上で画像がどのように見えるかを表すもので,通常は NumPy の配列(Python のデータを保存する素晴らしい方法です)の形で,画像に関するすべてのピクセル情報を含みます.
-
:
コロンは、これが関数の "命令 "の終わりであることを示し、関数の実際の "作業"(すなわち、コード)は通常その後に続く。
-
...
これが "関数プレビュー "または "ドラフト "文書にある場合、 ......、それは関数のメインコードが「省略」されていることを意味し、その関数がどのように動作するかを伝えるだけです。
例:最初の絵を手で読んでみましょう!
準備はいいかい?コンピュータに絵を「見せる」プログラムを書いてみましょう!
import cv2 as cv # OpenCV モジュールをインポートし、短い名前「cv」を付けます
# 読み込みたい画像ファイルの名前やパスを指定します
# 'Pandora.png' は自分の画像ファイル名に合わせて変更してくださいね!
file_path = 'Pandora.png'
# OpenCV の imread 関数を使って、指定したパスの画像を読み込みます。
# 読み込まれたデータは 'source_picture' という変数に保存されます。
source_picture = cv.imread(file_path)
# 画像が正しく読み込めたか確認します。
# 'source_picture' が None(空っぽ)なら、読み込み失敗です!
if source_picture is None:
print(f"おっと!画像が読み込めませんでした。パスが正しいか確認してください:{file_path}")
else:
# 無限ループを開始して、ウィンドウを閉じない限り画像を表示し続けます。
while True:
# cv.imshow 関数で「Read Picture」という名前のウィンドウを作成(または更新)し、
# 'source_picture' の画像を表示します。
cv.imshow('Read Picture', source_picture)
# cv.waitKey(1) は、キーボード入力があるまで 1ミリ秒「待機」します。
# キーが押されたらそのコードを返し、何も押されなければ -1 を返します。
key = cv.waitKey(1)
# 押されたキーが「ESC」キー(コード 27)かどうかをチェックします。
if key & 0xFF == 27:
break # ESC キーが押されたらループを抜け、表示を終了します。
# cv.destroyAllWindows() を呼び出して、OpenCV が作成したすべてのウィンドウを閉じます。
# これはメモリのリソースを解放するための良い習慣です。
cv.destroyAllWindows()
プログラムの結果
上のコードを実行すると、うまくいけば、あなたの写真を表示するウィンドウがポップアップ表示されます!効果を見るために、写真のパスを変えてみることもできます!
以上、 imread 関数の紹介でした!これを覚えれば、画像処理の第一歩を踏み出したことになります。その後、このプログラムを使って、あなたの写真に次のような面白いことができます:
- 画像編集: フィルターの追加、明るさの調整、トリミングなど。
- 画像認識: コンピュータに写真の中の物体や顔などを認識させる(これは人工知能の非常に重要な基礎です!)。ゲーム開発
- ゲーム開発: ゲーム内のグラフィックリソースを読み取ります。
imwrite:写真を保存する魔法!
プログラムで写真を加工した後、このクールな結果をどうやって「保存」するのか不思議に思っていませんか?ご心配なく、imwrite 関数はあなたの救世主です!imwrite関数はあなたの救世主です!これは OpenCVの ウィザードで、プログラムメモリからコンピュータファイルに画像を戻す役割を果たします!
imwriteの「ID」と「ヘルプ」!
imwrite 関数の "プロトタイプ "は以下の通りです。 imwrite 関数に伝えるべきことは主に2つあります:
def imwrite(
filename: str,
# 保存したいファイル名やパスを指定します
#(例:'output_image.png')。文字列(str)で入力します。
img: cv2.typing.MatLike,
# 保存する画像データを指定します。通常は imread で読み込んだり、 # 加工したりした画像データです。
params: _typing.Sequence[int] = ... )
# オプション設定です。画像の品質や圧縮率などを指定できます
#(通常は省略してデフォルト値を使います)。
-> bool:
# この関数は「実行結果」を返します。
# 保存に成功したら True、失敗したら False を返します。
戻り値:imwriteはあなたに「うまくいったか?
imwriteに 画像の保存を頼むと、簡単な答えが返ってくる:
ブール。
というのは、関数がブール値(bool)を返すことを期待しているということです。ブール値とは何か?それは2つの状態しか持たない「スイッチ」のようなものだ:
-
真:
は「成功」を意味します!画像はコンピュータに正常に保存されました!
-
偽:
は「失敗...」を意味します。画像が保存できない理由は、指定したファイルパスが正しくない、コンピュータがその場所への保存を許可していない、画像のフォーマットに問題があるなど、いろいろ考えられます。
注意:写真の保存に使える小角がいくつかあります!
写真をスムーズに保存したい場合は、以下の点に注意しましょう:
-
ファイルの拡張子を見て形式を判断する:
imwriteは とても賢い!ファイルパスを与えると、最後の拡張子(例えば.pngや.jpg)を見て、どのような形式で画像を保存するかを決定します。ですから、画像をPNGとして保存したい場合、ファイル名にPandora.pngを使用することができます!
-
フォーマットのサポート
異なる画像フォーマット (JPG、PNG、BMP など) は、"深度" と "カラーチャンネル数" のサポートレベルが異なります。
実践例:手書きで画像をコンピュータに保存してみましょう!
では、画像を読み込んで別のファイルに保存するプログラムを書いてみましょう!
import cv2 as cv # OpenCV モジュールをインポートします
# 読み込みたい元の画像ファイルのパスを指定します。
# 'Pandora.png' は自分の画像ファイル名に合わせて変更してくださいね!
file_path = 'Pandora.png'
# OpenCV の imread 関数を使って、指定したパスの画像を読み込みます。
# 読み込まれたデータは 'source_picture' という変数に保存されます。
source_picture = cv.imread(file_path)
# 画像が正しく読み込めたか確認します。
# 'source_picture' が None(空っぽ)なら、読み込み失敗です!
if source_picture is None:
print(f"おっと!画像が読み込めませんでした。パスが正しいか確認してください:{file_path}")
else:
# 保存したい先のファイルパスを指定します。
# ここでは 'SavePicture.png' としていますが、好きな名前や拡張子に変更できます!
save_path = 'SavePicture.png'
# OpenCV の imwrite 関数を使って、'source_picture' のデータを指定したパスに保存します。
# 保存形式は 'save_path' の拡張子(ここでは .png)によって自動的に決まります。
cv.imwrite(save_path, source_picture)
# 成功のメッセージです!
print(f"おめでとうございます!画像は正常に保存されました:{save_path}")
# cv.destroyAllWindows() を呼び出して、OpenCV が作成したすべてのウィンドウを閉じます。
# これはメモリのリソースを解放するための良い習慣です。
cv.destroyAllWindows()
結果は

上のコードを実行すると、うまくいけば、コードファイルのあるフォルダに SavePicture.png という新しいファイルができるはずです!
これは imwrite 関数の紹介です!imreadとimwriteの使い方を学べば、画像の読み込みと保存が簡単にできるようになり、次の画像処理プロジェクトの基礎が固まります。