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


231

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()

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

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

답변:


368

다음 코드는 파일에서 이미지를로드하여 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'.


4
@jay : 이 doc 문자열에 따라 "여기에 나열된 모든 컬러 맵을 추가하여 반전시킬 수 있습니다 _r."
unutbu

31
경고 matplotlib은 사용하지 않으려면 픽셀 스케일 강도를 조정합니다.plt.imshow(im_gray,cmap='gray', vmin = 0, vmax = 255)
themadmax


17

import matplotlib.pyplot as plt

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

plt.gray()

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

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

gray()또는 어떤 라이브러리를 사용하고 grey()있습니까?
셰릴 호 만

@SherylHohman, 그것은이다 gray ... 회색은 표준 미국 철자이고 회색은 영국의 철자입니다.
Cloud Cho

12

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

import matplotlib.pyplot as plt

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

11

@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


9

이 시도:

import pylab
from scipy import misc

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

없습니다 pylab.grey(), 아마도 제거 되었을까요?
Lyndon White

4

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

import matplotlib.pyplot as plt
plt.imshow(img[:,:,1], cmap='gray',interpolation='none')
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.