ITや趣味など気軽に投稿しています。

【Python】OpenCVで画像を表示・保存する

前回は画像の読み込みを説明したな。
今回は、読み込んだ画像の表示と保存について説明しよう。

お願いします。

画像の表示

画像の表示には、cv2.imshow()を使う。
表示するサイズの都合上、cv2.resize()表示前に画像のサイズを小さくしているが、ここは後々説明しよう。

import cv2

#画像の読み込み
img = cv2.imread("input/fox.jpg")

#画像のサイズ変更
height = img.shape[0]
width = img.shape[1]
resized_img = cv2.resize(img,(round(width/4), round(height/4)))

#画像をウィンドウで表示
cv2.imshow("sample", resized_img)

#おまじない
cv2.waitKey(0)
cv2.destroyAllWindows()
cv2.imshow("sample", resized_img)の出力画像

例の場合だと、”sample”という名称のウィンドウでresized_imgが表示されている。

おまじないって書いてあるのは、、?

cv2.waitKey(0)は、何かキーボードを押すまで処理を停止させている。これをしないとプログラムが終了してしまい、imshow()で表示した画像を確認できなくなる。

cv2.destroyAllWindows()はおまじないだ。

だからおまじないって、、?

(咳払い)
画像を表示したウィンドウを閉じるものだ。プログラムの終了と同時にウィンドウは閉じられるが、明示的に書いておくことを推奨する。

画像の保存

画像の保存には、cv2.imwrite()を使う。

import cv2

#画像の読み込み
img = cv2.imread("input/fox.jpg")

height = img.shape[0]
width = img.shape[1]
resized_img = cv2.resize(img,(round(width/4), round(height/4)))

#画像をグレースケールに変換
img_gray = cv2.cvtColor(resized_img, cv2.COLOR_BGR2GRAY)
#画像の保存
cv2.imwrite("gray_img.jpg", img_gray)

cv2.waitKey(0)
cv2.destroyAllWindows()
cv2.imwrite("gray_img.jpg", img_gray)で出力した画像

わかりやすいように途中で画像をグレースケールに変換して保存している。

cv2.imwrite()では、出力ファイル名で指定した拡張子のフォーマットで自動的に出力される。

例だと.jpgで出力されるわけですね。

その通り。対応するフォーマットは以下の通り。
cv2.imread()と同じだな。

種類拡張子
Windowsビットマップ*.bmp, *.dib
JPEGファイル*.jpeg, *.jpg, *.jpe
JPEG2000ファイル*.jp2
Portable Network Graphics*.png
Portable image format*.pbm, *.pgm, *.ppm
Sun rasters*.sr, *.ras
TIFF ファイル*.tiff, *.tif
OpenCVで出力できるファイル形式

こっちも種類が豊富だな~

JPEGの出力品質

出力フォーマットがJPEGの場合は、出力時の品質をパーセントで指定することができる。

ああ、常に最高品質だと、ファイルサイズが大きい場合もありますもんね。

cv2.imwrite()の引数に以下を付け足すことで指定できる。

[cv2.IMWRITE_JPEG_QUALITY, (品質パーセント)]
import cv2

#画像の読み込み
img = cv2.imread("photoA.jpg")

height = img.shape[0]
width = img.shape[1]
resized_img = cv2.resize(img,(round(width/4), round(height/4)))

img_gray = cv2.cvtColor(resized_img, cv2.COLOR_BGR2GRAY)
#100%品質
cv2.imwrite("gray_img1.jpg", img_gray, [cv2.IMWRITE_JPEG_QUALITY, 100])
#10%品質
cv2.imwrite("gray_img2.jpg", img_gray, [cv2.IMWRITE_JPEG_QUALITY, 10])

cv2.waitKey(0)
cv2.destroyAllWindows()

参考に、100%品質と10%品質の画像を並べてみよう。

100%品質(gray_img1.jpg)
10%品質(gray_img2.jpg)

確かに、gray_img2.jpgは粗いですね

今回はここまでにしよう。画像の表示と保存はばっちりだな、テック君。

もう、完璧ですよ。

では今回はここまでにしよう。
次回は動画を読み込んむ方法を紹介する。

ありがとうございました~~♪