2012-11-09 45 views
22

Làm cách nào để chuyển đổi hình ảnh RGB (3 kênh) thành hình ảnh thang độ xám, sử dụng phương pháp (r + g + b)/3? tôi xem xét thông qua một trang ví dụ: http://www.imagemagick.org/Usage/color_mods/#grayscale nhưng phương pháp mong muốn:Chuyển đổi RGB thành Grayscale trong dòng lệnh ImageMagick

convert test.png -fx '(r+g+b)/3' gray_fx_average.png 

đã cho tôi một kết quả sai - hình ảnh kết quả vẫn có 3 kênh.

Bạn có thể kiểm tra điều này bằng cách chạy lệnh: identify -format "%[colorspace] <== %f\n" *.png.

Trả lời

50

convert <img_in> -set colorspace Gray -separate -average <img_out> cho kết quả tốt nhất cho bất kỳ hình ảnh cho tôi.

+0

Cảm ơn egor7 :) lệnh egor7 làm việc tốt ngay cả với ImageMagick 6.5.7 mà có một vấn đề trở về hình ảnh rất tối khi sử dụng chỉ 'chuyển đổi - không gian màu xám '. Tôi đang sử dụng rails + paperclip trên heroku (imagemagick 6.5.8) và đã nhận được những hình ảnh rất tối với nhiều biến thể khác nhau của lệnh 'convert'. Điều này làm việc tuyệt vời;) Cảm ơn một lần nữa. –

+5

Ít nhất trong các phiên bản mới hơn của ImageMagick, có vẻ như '... -set colorspace ...' phải là '-colorspace'. –

7

Sử dụng phương pháp (r+g+b)/3 sẽ áp dụng hiệu ứng của thang độ xám, nhưng hình ảnh sẽ vẫn ở trong sRGB (là hành vi mong đợi cho phương pháp này). Bạn sẽ cần chỉ định mong muốn colorspace cùng với lệnh -fx.

convert test.png -fx '(r+g+b)/3' -colorspace Gray gray_fx_average.png 

Xác nhận với identify -format "%[colorspace] <== %f\n" gray_fx_average.png

Gray <== gray_fx_average.png 
1

Để chuyển đổi hàng loạt hình ảnh trong Fish shell:

for file in *.jpg; convert -colorspace Gray $file $file; end;

Các vấn đề liên quan