2013-01-17 2 views
4

matplotlib 및 물론 python을 사용하여 PNG 파일을 표시하려고합니다. 이제 Original Filematplotlib을 사용하여 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에서 해당 이미지를 플롯하려고하면 색상이 반전됩니다 : 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

어쨌든 RGBBGR으로 바뀌 었습니다. 녹색은 유지되지만 모든 파란색은 빨간색으로 바뀝니다. cube에 모양 (M, N, 3)이있는 경우 cube[:,:,0]cube[:,:,2]으로 바꿔 봅니다. 당신과 같이 numpy으로이 작업을 수행 할 수 있습니다

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

OpenCV 문서에서 :

참고 : 컬러 이미지의 경우, 디코딩 된 이미지는 B G 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()를 사용할 수 있습니다.

0

OpenCV가로드하는 컬러 이미지는 BGR 모드입니다. 그러나 Matplotlib은 RGB 모드로 표시됩니다. 그래서 우리는 RGB로 BGR에서 이미지를 변환 할 필요가 : 매우 적어도

plt.imshow(cv2.cvtColor(cube, cv2.COLOR_BGR2RGB)) 
관련 문제