Java чи Qt/C++ для створення програми обробки зображення?

Підписуйтеся на Telegram-канал «DOU #tech», щоб не пропустити нові технічні статті

Вітаю.
Маю запитання. Яку технологію краще вибрати для створення програми обробки зображення ( зміна яскравості, контрасту, гамми, побудова кривих R, G, B і тд.)? Це типу курсова в університеті.

Трішки розумію Java, ходив на курси по ній, а з Qt тільки стикнувся.

Тому краще розвивати далі Java чи розбиратися з Qt (що є не погано, нова технологія, але все ж), для CV наприклад.

👍ПодобаєтьсяСподобалось0
До обраногоВ обраному0
LinkedIn
Дозволені теги: blockquote, a, pre, code, ul, ol, li, b, i, del.
Ctrl + Enter
Дозволені теги: blockquote, a, pre, code, ul, ol, li, b, i, del.
Ctrl + Enter

Абсолютно не важно, OpenCV есть и на Java, и на С++, и на Python.

Нет. OpenCV есть только на крестах, к остальному — биндинги.

Хотя... Курсовик, контрастность, RGB. При таком раскладе можно считать, что OpenCV есть на python и java.

Я так понимаю — суть курсовой — освоить приметивные операции с растровыми изображениями (тобишь алгоритмы). Прикладная среда (чтение\запись файлов, визуализация) при этом значения не имеет. Ну так делай на чем хочешь :) И на чем знаешь :) Возможна разница в перформансе, но она не критична в данном случае :) А имплементация алгоритмов она везде будет +/- одинакова.

для курсової — без різнийці, на чому знайдеш приклади для копі-пасти
для подальшого розвитку краще джава

Яркость, контраст, гамма и прочее — легко меняется с помощью короткого пиксельного шейдера.

вот пример функции с изменением контраста:

extern float contrast: register(c1) = 1.0;
PS_OUTPUT PixContrast(PS_INPUT input)
{
PS_OUTPUT output;
float4 texel0 = tex2D(tex0, input.uv0);
output.diffuse.r = 0.5 + contrast*(texel0.r — 0.5);
output.diffuse.g = 0.5 + contrast*(texel0.g — 0.5);
output.diffuse.b = 0.5 + contrast*(texel0.b — 0.5);
return output;
};

Справедливости ради — это не изменение контраста, а увеличение или уменьшение шага внутри каждой цветовой компоненты пикселя. Например, шейдер вверху будет менять цвет монотонной текстуры, содержащей один цвет, хотя по всем правилам он это делать не должен. Или другой пример — текстура 2×1 содержащая два пикселя <0.7f, 0.0f, 0.0f> и <0.7001f, 0.0f, 0.0f> — увеличение контраста на 30% (contrast = 1.3f) даст <0.76f, 0.0f, 0.0f> и <0.76013f, 0.0f, 0.0f>. Т.е. контраст между двумя пикселями не изменился на 30%, а всего-лишь на число, близкое к нулю, ещё и поменялся цвет.

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

contrast желательно менять в диапазоне [0 ... 1], чтобы не было усечения компонент цветности. По сути, это линейная интерполяция к серому (lerp), визуально выглядит, как изменение контраста, алгоритм старый и баянистый.

contrast желательно менять в диапазоне [0 ... 1], чтобы не было усечения компонент цветности.
Тогда это будет только уменьшение контрастности.
По сути, это линейная интерполяция к серому (lerp)
Это только для уменьшения контрастности.
изуально выглядит, как изменение контраста, алгоритм старый и баянистый.
Ну вообще это алгоритм изменения color vibrance, который выглядит как изменение контрастности.

В вашем примере нужно заменить contrast на выражение: 1.0001 * (contrast + 1.0) / (1.0001 — contrast). Тогда диапазон будет −1..+1, где ноль — это середина. −1..0 будет работать как в вашем примере — эмуляция уменьшения контрастности, а 0..1 будет работать как эмуляция увеличения контрастности.;

Для contrast −1 получим цвет <0.5, 0.5, 0.5>
Для contrast 0 получим цвет <r, g,="" b="">
Для contrast 1 получим цвет <0.0, 0.0, 0.0> если исходный цвет меньше <0.5, 0.5, 0.5> и стремление к pure color, если больше.

Ваш график синий, мой-красный.
www.desmos.com/calculator/ixjtmkthfm

Для курсовой — совершенно неважно. Пишите на том, на чем вам удобнее и что вы знаете.
В реальных проектах все это будет все-равно делаться на OpenGL/DirectX акселераторах, а в этот чудный мир нужно влазить весьма долго и плотно.

Краше усе-таки java:
1. Можна додатково підтягнути рівень того, що вчив.
2. Наявність ImageJ спростить життя при написанні диплому ))

— Ну да — растровый редактор на джаве это сильно :) Лучше сразу на ХТМЛ5.

Такие уже есть и они весьма удобные?
Что не так то?)

На ХТМЛ5 тоже наверняка есть :) А не так вопросы перформанса при попытке редактировать и обрабатывать ну скажем растр 10к на 10к :) Или поменьше :)

Не думаю, что будет существенная разница с таким маленьким размером. Не на Java 1.4 пишите же.

Сразу видно «профессионала»...

Можна використати OpenCL, там наче нічого складно не треба, і найпростішими прикладами, що є у SDK, можна обійтися. При тому є біндінги до Java, тому основу на ній можна.
Тількі на гівні мамонта, що трапляється в інститутах не працюватиме.

Підписатись на коментарі