LoginSignup
5
8

More than 1 year has passed since last update.

[python]画像の表示と保存について

Last updated at Posted at 2020-02-18

はじめに

こちらの記事https://qiita.com/Daiki_P/items/e2a67be67992783ef2e2 で画像表示について簡単にまとめました. 次はこの画像の保存についてまとめたいと思います. 個人的には意外と面倒だと感じます.

import cv2
from matplotlib import pyplot as plt
img = cv2.imread("Pasta.jpg") #BGRで取得.
img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB) #BGRをRGBに変換.
plt.imshow(img)
plt.show()

Qita用.jpg

OpenCVの関数で保存

素直に書くと以下のようにcv2.imwriteを書いてしまうこともあると思います. しかし, OpenCVのcv2.imwriteはBGRの順で書き込むので, RGB変換をしたことが原因で変な画像となってしまいます.

失敗例
#imreadで読み込んだ画像をRGBに変換したのがimg.
#このimgをそのままimwriteに渡すと保存結果が不自然になる.

import cv2
from matplotlib import pyplot as plt
img = cv2.imread("Pasta.jpg") #BGRで取得.
img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB) #BGRをRGBに変換.
cv2.imwrite("Past_write.jpg",img)
plt.imshow(img)
plt.show()

[保存結果]
h.jpg

なので, こうするのが一つの対策です. 変数名を変えて, imgを避難させただけです.

成功例
#matplotlibでの表示はRGBのimg_RGBで行う.
#opencvでの保存はBGRのimgで行う.

import cv2
from matplotlib import pyplot as plt
img = cv2.imread("Pasta.jpg") #BGRで取得.
img_RGB = cv2.cvtColor(img, cv2.COLOR_BGR2RGB) #BGRをRGBに変換.
cv2.imwrite("Past_write.jpg",img) 
plt.imshow(img_RGB)
plt.show()

[保存結果]
Qita用.jpg

最後に

今回は, OpenCVの関数での画像保存について書きました. matplotlibのsavefigでも画像保存が可能ですが, 軸や余白の設定がやや煩雑となり, OpenCVのimwriteの方がスッキリと書けると個人的には思うので, そのようにしました.

5
8
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
8