8

matplotlibともちろんpythonを使用してPNGファイルを表示しようとしています。このテストでは、次の画像を生成しました。 元のファイル

次に、画像を読み込んで多次元のnumpy行列に変換します。

import numpy as np
import cv2
from matplotlib import pyplot as plt

cube = cv2.imread('Graphics/Display.png')
plt.imshow(cube)
plt.ion()

その画像をmatplotlibにプロットしようとすると、色が反転します。プロット

行列に変更がない場合、プロットの色が間違っているのはなぜですか?

前もって感謝します。

4

4 に答える 4

23

どういうわけかでRGB切り替えたようBGRです。緑は保持されますが、すべての青が赤に変わったことに注意してください。cube形状が(M、N、3)の場合は、と交換cube[:,:,0]してみてくださいcube[:,:,2]。あなたはそのnumpyようにそれを行うことができます:

rgb = numpy.fliplr(cube.reshape(-1,3)).reshape(cube.shape)

OpenCV ドキュメントから:

注:カラー画像の場合、デコードされた画像にはBGR順にチャネルが保存されます。

于 2013-01-17T20:59:03.970 に答える
17

試す:

plt.imshow(cv2.cvtColor(cube, cv2.COLOR_BGR2RGB))
于 2014-04-24T23:48:01.427 に答える
1

他の人が指摘しているように、問題はnumpy配列がBGR形式であるということですが、matplotlibは配列が異なる方法で順序付けられることを期待しています。

あなたが探しているscipy.misc.toimage

import scipy.misc
rgb = scipy.misc.toimage(cube)

または、を使用することもできますscipy.misc.imshow()

于 2016-06-15T19:24:35.930 に答える
0

OpenCVによってロードされたカラー画像はBGRモードです。ただし、MatplotlibはRGBモードで表示されます。したがって、画像をBGRからRGBに変換する必要があります。

plt.imshow(cv2.cvtColor(cube, cv2.COLOR_BGR2RGB))
于 2017-08-31T08:43:05.227 に答える