Helpex - Trao đổi & giúp đỡ Đăng nhập
21

Tôi có một số ô màu mà tôi cần được lưu trong thang độ xám. Có cách nào dễ dàng để thực hiện việc này mà không cần thay đổi các định dạng biểu đồ không?

21 hữu ích 2 bình luận 23k xem chia sẻ
5

Trên thực tế, điều này đã được hỏi trước đây. Đây là một câu trả lời khá hay, đứng thứ 2 trên google (tính đến ngày hôm nay):
Hiển thị hình ảnh dưới dạng thang độ xám bằng cách sử dụng matplotlib

Và giải pháp RẤT giống với của Suki ...

Ồ, tôi đang chán, vì vậy tôi đăng ở đây cũng là một mã đầy đủ:

import numpy as np
import pylab as p
xv=np.ones(4)*.5
yv=np.arange(0,4,1)
xv1=np.ones(4)*-.5
yv1=np.arange(0,4,1)

#red vertical line on the right
yv2=np.arange(0,1.5,0.1)
xv2=np.ones_like(yv2)*.7

#red vertical line on the left
yv3=np.arange(0,2,0.01)
xv3=np.ones_like(yv3)*-0.7

###
xc=np.arange(-1.4,2,0.05)
yc=np.ones_like(xc)*1

fig = p.figure()
ax1 = fig.add_subplot(111)
#adjustprops = dict(left=0.12, bottom=0.2, right=0.965, top=0.96, wspace=0.13, hspace=0.37)
#fig.subplots_adjust(**adjustprops)
ax1.plot(xv,yv, color='blue', lw=1, linestyle='dashed')
ax1.plot(xv1,yv1, 'green', linestyle='dashed')
ax1.plot(np.r_[-1:1:0.2],np.r_[-1:1:0.2],'red')
ax1.plot(xc,yc, 'k.', markersize=3)

p.savefig('colored_image.png')

import matplotlib.image as mpimg
import matplotlib.cm as cm
import Image

figprops = dict(figsize=(10,10), dpi=100)
fig1 = p.figure(**figprops)
#fig1 = p.figure()
#ax1 = fig.add_subplot(111)
adjustprops = dict()
image=Image.open('colored_image.png').convert("L")
arr=np.asarray(image)
p.figimage(arr,cmap=cm.Greys_r)
p.savefig('grayed.png')
p.savefig('grayed.pdf',papertype='a4',orientation='portrait')

Thao tác này sẽ tạo ra một biểu đồ có màu, ngoài việc đọc nó, hãy chuyển nó sang thang màu xám và sẽ lưu một tệp png và pdf.

5 hữu ích 2 bình luận chia sẻ
9

Hiện tại, thật khó để thực hiện trực tiếp từ matplotlib, nhưng trong "tương lai" họ có kế hoạch hỗ trợ một set_gray(True)cuộc gọi trên hình (xem chuỗi danh sách gửi thư tại đây ).

Các tùy chọn tốt nhất của bạn sẽ là lưu nó bằng màu và chuyển đổi nó, trong python với PIL:

import Image
Image.open('color.png').convert('L').save('bw.png')

hoặc từ dòng lệnh với imagemagick:

convert -type Grayscale color.png bw.png
9 hữu ích 1 bình luận chia sẻ
8

Có một giải pháp dễ dàng:

plt.imsave(filename, image, cmap='gray')
8 hữu ích 0 bình luận chia sẻ
3

Tôi cũng đang đấu tranh với vấn đề này. Theo như tôi có thể nói, matplotlib không hỗ trợ chuyển đổi trực tiếp sang thang độ xám, nhưng bạn có thể lưu một pdf màu và sau đó chuyển đổi nó sang thang độ xám bằng ghostcript:

gs -sOutputFile=gray.pdf -sDEVICE=pdfwrite -sColorConversionStrategy=Gray -dProcessColorModel=/DeviceGray -dNOPAUSE -dBATCH -dAutoRotatePages=/None color.pdf
3 hữu ích 5 bình luận chia sẻ
0

Và để thêm vào giải pháp của Mu Mind

Nếu vì bất kỳ lý do gì bạn muốn tránh ghi nó vào một tệp, bạn có thể sử dụng StringIO như một tệp:


 import Image
 import pylab
 from StringIO import StringIO

 pylab.plot(range(10),[x**2 for x in range(10)])

 IO = StringIO()
 pylab.savefig(IO,format='png')
 IO.seek(0)

 #this, I stole from Mu Mind solution
 Image.open(IO).convert('L').show()
0 hữu ích 1 bình luận chia sẻ
loading
Không tìm thấy câu trả lời bạn tìm kiếm? Duyệt qua các câu hỏi được gắn thẻ python matplotlib , hoặc hỏi câu hỏi của bạn.

Có thể bạn quan tâm

loading