Обработка нескольких преобразований на изображении - PullRequest
1 голос
/ 30 мая 2019

Я управляю проектом, который будет работать более или менее так же, как CameraRaw / Photoshop.Дело в том, как мне обрабатывать несколько модов в матрице изображения?

позвольте мне объяснить, я прочитал изображение с помощью функции OpenCV и я создал простой пользовательский интерфейс в QtCreator, с несколькими ползунками для контрастности, экспозициии т. д., поэтому я получил ползунки, которые при сработавшем действии вызывают функцию контрастность ();на том, где я передаю свое изображение, и значение ползунков (ползунки могут быть от -100 до 100).

Вот проблема: если я установлю экспозицию на +50, то мое изображение увеличит ее до +50,Исходя из этого, если я попытаюсь уменьшить его до +30, то экспозиция будет +50 +30, как я написал на своем пиксельном изображении.

Итак, чтобы уменьшить с +50 до +30Я сделал копию своего изображения, которое будет изменено, и когда я вспомню экспозицию (), фильтр будет применен к исходному изображению.

Пока все хорошо, но что, если ябудете применять контраст () и экспозицию () одновременно?Как я и сделал на данный момент, вызов одной из двух исключит первых вызванных.

Есть ли кто-нибудь, кто может помочь с определением способа справиться с этим?

Ответы [ 3 ]

2 голосов
/ 30 мая 2019

Как насчет применения всех преобразований к исходному изображению все время?

Вы знаете положение ваших ползунков и знаете, когда что-то меняется. Затем вы просто начинаете с нуля. Возьмите новое изображение и примените преобразования по одному.

Для этого вы заставляете функции возвращать копию исходного изображения с примененными преобразованиями. Итак, алгоритм будет выглядеть примерно так:

originalImage = getImage();
brightnessImage = applyBrightness(originalImage);
contrastedImage = applyContrast(brightnessImage);

и так далее. Каждый раз, когда что-то меняется.

Я думаю, что это разумно, поскольку вы, похоже, не имеете дело с очень дорогими операциями.

0 голосов
/ 14 июня 2019

Привет решил эту проблему, создав одну функцию, которая обрабатывает все линейные преобразования вместе!

0 голосов
/ 30 мая 2019

Ответы Paul92 уже отвечают на ваш вопрос и, возможно, являются самым простым и чистым решением вашей проблемы.

Если вы действительно хотите / хотите сохранить последнее преобразованное изображение вместо исходного, вы можете сохранить значениеположения ползунков при последнем преобразовании и используйте дельту для фактического преобразования:

brightnessDelta = brightnessSlider->value() - latestBrightnessSlider;
constrastDelta = contrastSlider->value() - latestContrastSlider;

latestTransformedImage = getImage();
applyBrightness(latestTransformedImage, brightnessDelta);
applyContrast(latestTransformedImage, contrastDelta);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...