Форум программистов, компьютерный форум, киберфорум
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
return1
0 / 0 / 0
Регистрация: 05.05.2017
Сообщений: 8
#1

Как преобразовать изображение BMP в черно-белое и не только? - C++

06.05.2017, 10:35. Просмотров 411. Ответов 3
Метки нет (Все метки)

Здравствуйте!
В общем стоит задача сделать консольный фото редактор, который выполнял бы ряд задач. Не без помощи гугла, часть из них я сделал, и осталось еще две с которыми возникли трудности.
1) сделать изображение черно-белым
2) сделать 3Д эффект (что бы когда смотришь на него в очках 3Д оно было объемным)

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

вторую задачу еще не реализовывал, но даже не могу додуматься как это реализовать. Первое что приходит в голову, это копировать изображение, и у оригинала оставляем RED(красный)цвет, отключи GREEN(зеленый) и BLUE(голубой),а у копии изображения наоборот- оставляет GREEN(зеленый) и BLUE(голубой) и отключаем только RED(красный). Далее нужно наложить одно изображение на другое, при этом сместив немного правее изображение, где мы оставили только RED(красный) цвет.
В итоге в теории должно получиться, но опять же как это реализовать?

Во вложении приложу полную программу
вот кусочек из ее связанный с черно-белым фильтром
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
void BMP::BW()
{
    float Y0 = 0; // средняя яркость
 
    for (int i = 0; i < biHeight; i++) //i -высота
        for (int j = 0; j < biWidth * 3; j = j + 3)
            Y0 += MBMP[i][j] * 0.11 + MBMP[i][j + 1] * 0.59 + MBMP[i][j + 2] * 0.3; //j-ширина BGR
    Y0 = Y0 / (biWidth*biHeight);
 
    // изменение цветов пикселей
    for (int i = 0; i < biHeight; i++)
        for (int j = 0; j < biWidth * 3; j++)
        MBMP[i][j] = Y0;
 
        printf("\t\t--------Готово!-------\n");
        system("pause");
}
11111.rar
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
06.05.2017, 10:35
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Как преобразовать изображение BMP в черно-белое и не только? (C++):

Загрузить черно-белое изображение в массив - C++
Здравствуйте, помогите с решением задачи: как загрузить бинарное изображение(черное и белое только) в массив? Спасибо.

Черно-белое изображение в одномерный массив - C++
Подскажите как преобразовать изображение 256х256х8. В одномерный массив?

Черно-белый BMP рисунок преобразовать в двумерный массив (матрицу) - C++
Есть черно-белый рисунок в формате BMP - необходимо отобразить в тхт файле матрицу, где бы цифрами от 0 до 255 отображались все оттенки...

Цветной BMP в черно-белый - C++
Всем привет! Я выделяю из изображения один цветовой канал и нужно сохранить его в черно-белом виде в BMP файле. Первой мыслью было...

Работа с BMP-файлами (класс "8 битное BMP изображение) - C++
Написать класс &quot;8 битное BMP изображение&quot;.Класс должен содержать 3 конструктора: конструктор по умолчанию, конструктор с параметрами и...

Увеличить BMP изображение в два раза - C++
Дано задание увеличить 8-битное BMP изображение в два раза. Функцию реализовать в классе. После некоторых размышлений получился сий код=)...

3
saserlend
11 / 11 / 1
Регистрация: 25.11.2011
Сообщений: 145
06.05.2017, 12:55 #2
Про 3d ничего не скажу, а как вы себе предстовляете черно - белое изображение? Давненько делал такое на # для универа, но если хотите 0,0,0 и 255,255,255 , то сравнивайте яркость пикселя со средней яркостью ( или задайте значение ) и если яркость пикселя меньше средней яркости красим в 0, если больше в 255. Как то так.
0
return1
0 / 0 / 0
Регистрация: 05.05.2017
Сообщений: 8
06.05.2017, 16:41  [ТС] #3
Задание с переводом в Ч/Б реализовал- понял где была ошибка. Код ниже если что.
Теперь нужно понять как реализовать перевод картинки для чтения в очках 3D
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
void BMP::BW()
{
    float Y0 = 0; // средняя яркость
 
    for (int i = 0; i < biHeight; i++) //i -высота******
        for (int j = 0; j < biWidth * 3; j = j + 3)
        {
            Y0 += MBMP[i][j] * 0.3 + MBMP[i][j + 1] * 0.59 + MBMP[i][j + 2] * 0.11 ; //j-ширина BGR
            Y0 = Y0 / 3;
 
            MBMP[i][j] = Y0;
            MBMP[i][j+1] = Y0;
            MBMP[i][j+2] = Y0;
 
        }
    
        printf("\t\t--------Готово!-------\n");
        system("pause");
}
0
saserlend
11 / 11 / 1
Регистрация: 25.11.2011
Сообщений: 145
06.05.2017, 16:50 #4
По поводу черно - белого я имел в виду бинаризацию( вспомнил слово ) реализуется в твоем случае как то так -
C++
1
2
3
4
5
6
7
8
9
10
11
12
int *rr = new int, *gg = new int, *bb = new int;
for (int i = 0; i < biHeight; i++)
            for (int j = 0; j < biWidth * 3; j++)
            {
                GetPixel(j, i, rr, gg, bb);
                double sr = (*rr + *gg + *bb) / 3;
                if (sr < Y0)
                {
                    PutPixelRGB(j, i, 0, 0, 0); 
                }
                else PutPixelRGB(j, i, 255, 255, 255);  
            }
1
06.05.2017, 16:50
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
06.05.2017, 16:50
Привет! Вот еще темы с ответами:

Из массива пикселей сформировать bmp изображение - C++
Добрый день. Имеется массив пикселей char*, из которого необходимо сформировать bmp изображение. В массиве пиксел представлен 12-ти...

Считать BMP изображение в динамическую память - C++
Нужно считать ВМР изображение в массив в динамической памяти используя fstream.

Не записывает в файл (увеличить bmp изображение в 2 раза) - C++
Дано задание увеличить bmp изображение в 2 раза. Написал программу, которая по идее, должна делать сие действие (все в классе), но записи в...

Преобразовать текст из *.txt (в любой кодировке) в картинку формата *.bmp - C++
Привет) Нужна помощь с написанием программы..нужна информация) Задание: Написать программу, которая преобразует текст из *.txt (в...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.