Ruby-библиотека обработки изображений VIP-персон.Есть ли какие-нибудь хорошие примеры использования?

StackOverflow https://stackoverflow.com//questions/10709995

  •  13-12-2019
  •  | 
  •  

Вопрос

Я совершенно новичок в обработке изображений.Я ничего не знаю о том, что такое внутренний формат JPEG и как он работает.

Интересно, смогу ли я найти где-нибудь фрагмент ruby-кода, выполняющий следующую простую операцию:

  1. Откройте файл jpeg.
  2. Выполните итерацию по каждому пикселю и установите для него цвет fx green.
  3. Запишите результат в другой файл.

Меня особенно интересует, как это может быть достигнуто с помощью библиотеки ruby-vips
https://github.com/ender672/ruby-vips

Моя цель - научиться выполнять базовые операции обработки изображений с помощью ruby-vips (гамма-коррекция, яркость, оттенок, ...)

Любые ссылки на рабочие примеры, более сложные, чем "hello world" - например, на странице ruby-vips на github, были бы высоко оценены!

Если есть альтернативы ruby-vips, я был бы благодарен и за них.


Обновить

Многое произошло с тех пор, как я задал этот вопрос:

Это было полезно?

Решение

Обновить ruby-vips немного изменился с тех пор, как был написан этот ответ.Я переработал его для текущей версии (2018).

Я один из разработчиков libvips, библиотеки обработки изображений, которую использует ruby-vips.

Репозиторий ruby-vips Тима некоторое время никто не трогал.У меня здесь есть форк, который работает с текущими libvips:

https://github.com/jcupitt/ruby-vips

Здесь есть несколько примеров:

https://github.com/jcupitt/ruby-vips/tree/master/example

Чтобы установить красный и синий каналы равными нулю и просто оставить зеленое изображение, вы можете умножить R и B на ноль и G на 1.ruby-vips использует массивы для представления пиксельных констант, так что вы можете просто написать:

out = in * [0, 1, 0]

Полным работоспособным примером может быть:

#!/usr/bin/ruby

require 'vips'

im = Vips::Image.new_from_file '/home/john/pics/theo.jpg'
im *= [0, 1, 0]
im.write_to_file 'x.jpg'

Есть один трюк, который вы можете использовать для new_from_file:если вы знаете, что будете выполнять простые операции с изображением сверху вниз, такие как арифметика, фильтрация или изменение размера, вы можете сообщить ruby-vips, что вам нужен только последовательный доступ к пикселям:

im = Vips::Image.new_from_file '/home/john/pics/theo.jpg', access: :sequential

Теперь ruby-vips будет транслировать ваше изображение.Он будет выполнять загрузку, умножение и сохранение параллельно и никогда не сохранит в памяти более нескольких строк сканирования пикселей одновременно.Это может дать действительно хорошее улучшение скорости и использования памяти.

Чтобы изменить гамму изображения, вы можете попробовать что-то вроде:

im = im ** 0.5 * 255 / 255 ** 0.5

Хотя это будет немного медленно (он вызовет pow () три раза для каждого пикселя), было бы намного быстрее создать таблицу поиска, запустить pow () для нее, а затем сопоставить изображение с таблицей:

lut = Vips::Image.identity
lut = lut ** 0.5 * 255 /255 ** 0.5
im = im.maplut lut

Если у вас есть какие-либо вопросы, пожалуйста, не стесняйтесь задавать их на странице отслеживания проблем rubyvips:

https://github.com/jcupitt/ruby-vips/issues

Другие советы

Мне жаль, что я не знаком с ruby-vips, но ImageMagick - Магия изображений это классика, когда дело доходит до обработки изображений.Существуют привязки Ruby в виде Рмагик (текущее репо), и вы можете извлечь множество функциональных возможностей из документов ImageMagick, но есть также три руководства здесь, а также множество примеров в Интернете.

Если вы действительно хотите углубиться в теорию обработки изображений, которая по своей сути является формой обработки сигналов (это очень увлекательно и полезно, поскольку часто позволяет применять к изображениям очень похожие алгоритмы и аудио / видеосигналы, но в конечном итоге это сильно повлияет на математику - преобразования Фурье), тогда, если математика вас не пугает, я могу только порекомендовать прочитать книга автор Гонсалес и Вудс, я бы сказал, что это определенный ориентир в этой области.Это дорого, но там есть все, что вам нужно для начала работы и далеко за ее пределами. Вот также есть страница со ссылками на бесплатные электронные книги, если вы хотите начать, не тратя сначала много денег.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top