2013-01-17 44 views
4

我試圖使用顯示和matplotlib當然,蟒蛇PNG文件繪製PNG文件時,反色。對於這個測試,我已經產生了下面的圖片: Original File使用matplotlib

現在,我加載和圖像變換成多維矩陣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那張圖片時,顏色反轉:Plot

如果矩陣沒有任何的修改,爲什麼在情節的顏色不對?

在此先感謝。

+1

至少,這裏的顏色不會顛倒。黑色仍然對應着黑色,綠色到綠色。我有一種感覺,matplotlib將值映射到調色板並根據調色板上的值進行着色。 – mgilson

+0

@mgilson如果matplotlib根據調色板映射顏色,我該如何修改該調色板? –

+1

我看[這裏](http://matplotlib.org/users/image_tutorial.html)和[這裏](http://matplotlib.org/examples/pylab_examples/show_colormaps.html) – mgilson

回答

16

看來,你可能以某種方式有RGB交換與BGR。注意你的果嶺保留了,但所有的藍色都變成了紅色。如果cube具有形狀(M,N,3),試換cube[:,:,0]cube[:,:,2]。可以做到這一點與numpy像這樣:

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

OpenCV文檔:

注意:在彩色圖像的情況下,解碼的圖像將具有存儲在乙ģr命令的 通道。

+1

良好的解決方法,但問題仍然存在:爲什麼發生? –

+0

請參閱上面的修改。 – bogatron

+1

幹得好,從我+1。 –

6

嘗試:

plt.imshow(cv2.cvtColor(cube, cv2.COLOR_BGR2RGB)) 
+0

漂亮優雅的解決方案! – pyan

+0

如果圖像已經是灰度,這會引發錯誤 –

1

正如其他人所指出的那樣,問題在於numpy的數組在BGR格式,但matplotlib希望以不同的方式來進行排序的陣列。

您正在尋找scipy.misc.toimage

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

或者,你可以使用scipy.misc.imshow()。通過加載的OpenCV

0

彩色圖像是BGR模式。但是,Matplotlib以RGB模式顯示。 因此,我們需要將圖像從BGR轉換爲RGB:

plt.imshow(cv2.cvtColor(cube, cv2.COLOR_BGR2RGB))