[python] matplotlib을 사용하여 이미지를 회색조로 표시

matplotlib.pyplot.imshow () 사용하여 회색조 이미지를 표시하려고합니다 . 내 문제는 회색조 이미지가 컬러 맵으로 표시된다는 것입니다. 이미지 위에 색으로 그리려면 그레이 스케일이 필요합니다.

이미지를 읽고 PIL의 Image.open (). convert ( “L”)을 사용하여 회색조 로 변환

image = Image.open(file).convert("L")

그런 다음 이미지를 행렬로 변환하여 다음을 사용하여 이미지 처리를 쉽게 수행 할 수 있습니다.

matrix = scipy.misc.fromimage(image, 0)

그러나 내가 할 때

figure()
matplotlib.pyplot.imshow(matrix)
show()

컬러 맵을 사용하여 이미지를 표시합니다 (즉, 회색조가 아님).

내가 여기서 뭘 잘못하고 있니?



답변

다음 코드는 파일에서 이미지를로드하여 image.png회색조로 표시합니다.

import numpy as np
import matplotlib.pyplot as plt
from PIL import Image

fname = 'image.png'
image = Image.open(fname).convert("L")
arr = np.asarray(image)
plt.imshow(arr, cmap='gray', vmin=0, vmax=255)
plt.show()

역 계조를 표시하려면 cmap을로 전환하십시오 cmap='gray_r'.


답변

그레이 스케일 컬러 맵을 사용 하시겠습니까?

예를 들어

imshow(..., cmap=pyplot.cm.binary)

컬러 맵 목록은 http://scipy-cookbook.readthedocs.org/items/Matplotlib_Show_colormaps.html을 참조 하십시오.


답변

import matplotlib.pyplot as plt

코드에서 한 번만 실행할 수도 있습니다.

plt.gray()

이미지를 기본적으로 회색조로 표시합니다

im = array(Image.open('I_am_batman.jpg').convert('L'))
plt.imshow(im)
plt.show()


답변

get_cmap 메소드를 사용합니다. 전의.:

import matplotlib.pyplot as plt

plt.imshow(matrix, cmap=plt.get_cmap('gray'))


답변

@unutbu의 대답은 정답에 매우 가깝습니다.

기본적으로 plt.imshow ()는 (MxN) 배열 데이터를 0.0 ~ 1.0으로 조정하려고 시도합니다. 그런 다음 0 ~ 255로 매핑하십시오. 가장 자연스럽게 촬영 된 이미지의 경우 문제가 없습니다. 그러나 픽셀 값 이미지의 범위가 좁 으면 최소 픽셀은 156이고 최대 픽셀은 234입니다. 회색 이미지는 완전히 잘못 보입니다. 이미지를 회색으로 표시하는 올바른 방법은

from matplotlib.colors import NoNorm
...
plt.imshow(img,cmap='gray',norm=NoNorm())
...

예를 보자.

이것은 원본 이미지입니다 :
원본

이것은 defaul norm 설정을 사용하고 있습니다. 없음 :
잘못된 그림

이것은 NoNorm 설정 인 NoNorm ()입니다 :
right pic


답변

이 시도:

import pylab
from scipy import misc

pylab.imshow(misc.lena(),cmap=pylab.gray())
pylab.show()


답변

보간을 사용하지 않고 회색으로 설정하십시오.

import matplotlib.pyplot as plt
plt.imshow(img[:,:,1], cmap='gray',interpolation='none')