OpenCV と Matplotlib では、ピクセルの順序にわずかな違いがあります。
OpenCV は BGR の順序に従いますが、matplotlib は RGB の順序に従う可能性があります。
そのため、pylab 関数を使用して OpenCV に読み込まれた画像を表示する場合、RGB モードに変換する必要がある場合があります。(簡単な方法があるかどうかはわかりません)。以下のメソッドはそれを示しています:
import cv2
import numpy as np
import matplotlib.pyplot as plt
img = cv2.imread('messi4.jpg')
b,g,r = cv2.split(img)
img2 = cv2.merge([r,g,b])
plt.subplot(121);plt.imshow(img) # expects distorted color
plt.subplot(122);plt.imshow(img2) # expect true color
plt.show()
cv2.imshow('bgr image',img) # expects true color
cv2.imshow('rgb image',img2) # expects distorted color
cv2.waitKey(0)
cv2.destroyAllWindows()
NB : BGR と RGB の間のより良い変換方法については、以下の @Amro のコメントを確認してください。img2 = img[:,:,::-1]
. とてもシンプルです。
このコードを実行して、結果の違いを自分で確認してください。以下は私が得たものです:
Matplotlib の使用:
OpenCV の使用: