Построение гистограмм изображения. Исходный код на C++ Visual Studio
Сразу скажу, что подобные задания очень часто встречаются в учебных планах по компьютерной графике, как средство приобретения студентами навыков попиксельной обработки (корректировки) изображений, поэтому иметь образец работающего решения такого задания (или знать где его можно получить) безусловно полезно…, так что запоминайте адресок и/или друзьям в соцсетях порекомендуйте…
Гистограмой изображения называется графическое представление зависимости количества пикселей (процент пикселей) изображения от уровня (величины) заданного параметра (например: гистограмма яркости или гисторгаммы каждого из основных цветов). Как правило, параметры имеют свои пределы (минимум и максимум), а поскольку величина их откладывается на оси абцисс, то гистограмма является наглядной характеристикой данного изображения по указанному параметру.
Задание:
Написать программу построения гистограммы изображения.
Программа должна давать возможность:
- загружать файлы всех основных типов изображений;
- для вычисления яркости пикселей изпользовать преобразование в YUV пространство;
- двигать гистограмму яркости вправо-влево с соответствующим изменением изображения и гистограмм цветов.
Решение:
Ну, вот так, на мой взгляд, должна выглядеть форма, чтобы обеспечить заказанную функциональность…
А Вы можете изменить дизайн или нарастить функциональность под свои требования…
Этот исходный код рассматривайте только как шаблон, как отправную точку, а не образец или догму…
На рисунке показан пример незначительного понижения яркости изображения, а тестируя ехе-файл, Вы можете тщательно ознакомиться и возможностями приложения.
Кнопки «Загрузить» и «Очистить» воздействуют на оба изображения, т.е. на оригинал и результат.
Вместе с загрузкой изображения производится преобразование цветовых пространств из RGB в YUV
и выводятся гистограммы яркости и RGB цветов оригинального рисунка.
Далее кнопками сдвигов можно изменить гистограмму яркости, а чтобы изменения отобразились на
результирующем рисунке «необходимо и достаточно» воспользоваться кнопкой «YUV-RGB». Эта кнопка произведет
обратные преобразования цветовых пространств (из YUV в RGB) и,
соответственно, отобразит изменения на правых рисунке и гистограммах.
Понятно, что увеличение или уменьшение яркости Y при неизменных параметрах U и V вызовет
соответствующее изменение уровней основных цветов, что и отобразится на гистограммах.
О преобразованиях YUV-RGB (и обратно) найдете в Рунете (повторять не вижу смысла),
но поскольку в некоторых источниках константы матрицы преобразований расходятся, то приведу те, что использовал я…
//==== КОНСТАНТЫ ======================
const int a11=66;
const int a12=129;
const int a13=25;
const int a21=-38;
const int a22=-74;
const int a23=112;
const int a31=112;
const int a32=-94;
const int a33=-18;
const int b11=75;
const int b12=0;
const int b13=103;
const int b21=75;
const int b22=-25;
const int b23=-52;
const int b31=75;
const int b32=130;
const int b33=0;
Таким образом, проект (архивом в сборе) готов. Тестируйте…
скачать exe-файл для тестирования
Не забывайте, Есть Возможность, получить Консультацию по Skype и исправить под себя комментарии в коде…
Тогда проблем на сдаче, как правило, не возникает.
Условия получения кода? Показать?
Другие примеры на тему «Математические методы компьютерной 2D 3D графики»
Другие примеры на языках «C»,«C++»,«C#»
Поделиться в соц сетях: