画像を読み込んだ後は、その画像を表示して確認したり、処理結果をファイルとして保存する操作が必要になります。
この記事では、OpenCVのcv2.imshow()による画像の表示とcv2.imwrite()による画像の保存方法について解説します。
画像の表示
画像の表示にはcv2.imshow()を使用します。
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()
imshow()の第1引数はウィンドウ名、第2引数は表示する画像です。上の例では"sample"というウィンドウ名でresized_imgが表示されます。
cv2.waitKey(0)は、キーボードが押されるまで処理を停止します。これがないとプログラムが即座に終了し、画像ウィンドウを確認できません。
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()の第1引数は出力ファイル名、第2引数は保存する画像です。出力ファイル名で指定した拡張子のフォーマットで自動的に出力されます。
対応フォーマット
| 種類 | 拡張子 |
|---|---|
| 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()の第3引数に[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)
10%品質では画像が粗くなっていることがわかります。ファイルサイズを抑えたい場合は品質を下げ、高画質が必要な場合は品質を上げて使い分けます。
まとめ
今回は、OpenCVで画像を表示・保存する方法を紹介しました。
- 表示:
cv2.imshow()でウィンドウに画像を表示する - 保存:
cv2.imwrite()で画像をファイルに保存する - JPEG出力時は
IMWRITE_JPEG_QUALITYで品質を指定可能 cv2.waitKey(0)とcv2.destroyAllWindows()はセットで使うのが基本