目次
概要
OpenCV の cv2.imread()
で読み込んだ ndarray 形式の画像を matplotlib の Axes.imshow()
で表示する際の注意点について解説します。
OpenCV のカラー画像を表示する場合
OpenCV の cv2.imread()
で読み込んだカラー画像を matplotlib の Axes.imshow()
で表示した場合、以下のように色が反転します。
これは、OpenCV の cv2.imread()
で読み込んだ画像はチャンネル順が BGR であるのに対し、matplotlib の Axes.imshow()
で表示する際に画像のチャンネル順を RGB として扱うのが原因です。
In [1]:
import cv2
import matplotlib.pyplot as plt
img = cv2.imread("sample.jpg")
fig, ax = plt.subplots()
ax.imshow(img)
plt.show()
正しい色で表示するためには、表示する前に cv2.cvtColor(img, cv2.COLOR_BGR2RGB)
でチャンネル順を BGR から RGB に変換します。
In [2]:
img = cv2.imread("sample.jpg")
img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)
fig, ax = plt.subplots()
ax.imshow(img)
plt.show()
OpenCV のグレースケール画像を表示する場合
OpenCV の cv2.imread()
で読み込んだグレースケール画像を matplotlib の Axes.imshow()
で表示した場合、以下のようになります。
これは、matplotlib の Axes.imshow()
では、2次元の numpy 配列を渡した場合、画像ではなくデータとして解釈し、カラーマップを適用して描画するのが原因です。
In [3]:
img = cv2.imread("sample.jpg", cv2.IMREAD_GRAYSCALE)
fig, ax = plt.subplots()
ax.imshow(img)
plt.show()
正しい色で表示するためには、Axes.imshow()
を呼び出す際にカラーマップ cmap="gray"
を指定します。
また、カラーマップの範囲の下限、上限を vmin=0, vmax=255
で指定します。
In [4]:
fig, ax = plt.subplots()
ax.imshow(img, cmap="gray", vmin=0, vmax=255)
plt.show()
コメント