前回は画像の読み込みを説明したな。
今回は、読み込んだ画像の表示と保存について説明しよう。
お願いします。
画像の表示
画像の表示には、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()

例の場合だと、”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()では、出力ファイル名で指定した拡張子のフォーマットで自動的に出力される。
例だと.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 |
こっちも種類が豊富だな~
JPEGの出力品質
出力フォーマットがJPEGの場合は、出力時の品質をパーセントで指定することができる。
ああ、常に最高品質だと、ファイルサイズが大きい場合もありますもんね。
cv2.imwrite()の引数に以下を付け足すことで指定できる。
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%品質の画像を並べてみよう。


確かに、gray_img2.jpgは粗いですね
今回はここまでにしよう。画像の表示と保存はばっちりだな、テック君。
もう、完璧ですよ。
では今回はここまでにしよう。
次回は動画を読み込んむ方法を紹介する。
ありがとうございました~~♪