Форум программистов, компьютерный форум, киберфорум
C++ Builder
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.60/25: Рейтинг темы: голосов - 25, средняя оценка - 4.60
2 / 2 / 1
Регистрация: 29.11.2012
Сообщений: 143
1

Уменьшить количество цветов в изображении

15.04.2013, 22:07. Показов 4641. Ответов 6
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Здравствуйте! Пишу программу, которая преобразовывает изображение в схему для вышивки. Для этого изображение загружается в программу, разбивается на определенное количество равных квадратных ячеек (пользователь вводит количество необходимых ячеек по ширине изображения, и относительно этого программа разбивает все изображение). Затем в каждой ячейке определяется основной цвет, так чтобы в ячейке был только один цвет, результат выводится на экран. Дальше по задумке необходимо ограничить количество цветов на изображении (необходимое кол-во вводит пользователь) Вот тут то и возникает проблема: Если, скажем, пишем 3 цвета то это не совсем 3 цвета. У нас система RGB, и вот каждый из этих цветов делится на три. т.е. в реальности 3 - это 9. Как-то так.

Работаю в Borland C++ builder
У меня это записано таким образом:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
void __fastcall TForm1::Button1Click(TObject *Sender)
{
  int colcol=Edit2->Text.ToInt();
  int inclr,outclr,r,g,b;
  for (int x=1;x<Image2->Width;x++) {
    for (int y=1;y<Image2->Height;y++) {
      inclr=Image2->Canvas->Pixels[x][y];
      outclr=MyColors(colcol,inclr);
// r=OneColor(outclr,'R');
// g=OneColor(outclr,'G');
// b=OneColor(outclr,'B');
      Image2->Canvas->Pixels[x][y]=outclr;
    }
  }
}
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
15.04.2013, 22:07
Ответы с готовыми решениями:

Подсчитать количество цветов на изображении
Требуется подсчитать количество цветов на изображении, каким образом это можно сделать? Название...

Как изменить количество цветов в изображении
Здравствуйте. Как можно изменить количество допустимых цветов в изображении? Скажем, имеется у...

Как определить количество цветов в изображении?
Нужно определить количество цветов в изображении. Как это можно сделать с помощью фотошопа или...

Посчитать количество цветов в растровом изображении
загружаю с помощью компонента mainmenu изображение .bmp procedure TForm1.N2Click(Sender: TObject);...

6
LK
Заблокирован
15.04.2013, 22:36 2
Цитата Сообщение от Vashtanerada Посмотреть сообщение
Как-то так.
- не так... рассказывать долго, да и лень...
0
1090 / 588 / 121
Регистрация: 11.11.2008
Сообщений: 1,544
16.04.2013, 07:02 3
Цитата Сообщение от Vashtanerada Посмотреть сообщение
У нас система RGB, и вот каждый из этих цветов делится на три. т.е. в реальности 3 - это 9. Как-то так.
так. ну вот пользователь выбрал три цвета, мы их разложили в RGB
r1,g1,b1
r2,g2,b3
r3,g3,b3
берем пиксель с картинки, раскладываем и его: r,g,b
смотрим к какому из заданных 3 цветов он больше всего тяготеет:
rr1 = abs (r1-r)
gg1= abs (g1-g)
bb1 = abs (b1-b)

rr2 = abs (r2-r)
gg2= abs (g2-g)
bb2 = abs (b2-b)

rr3 = abs (r3-r)
gg3= abs (g3-g)
bb3 = abs (b3-b)

и вот какая сумма из
rr1+gg1+bb1
rr2+gg2+bb2
rr3+gg3+bb3
будет минимальной, тот цвет и назначаем пикселю.
думаю мысль понятна, попробовать стоит)
1
2 / 2 / 1
Регистрация: 29.11.2012
Сообщений: 143
16.04.2013, 09:42  [ТС] 4
Цитата Сообщение от LK Посмотреть сообщение
- не так... рассказывать долго, да и лень...
Вы не правы. Рассказала так, как смогла.

Добавлено через 3 минуты
Цитата Сообщение от AntonChik Посмотреть сообщение
так. ну вот пользователь выбрал три цвета, мы их разложили в RGB
берем пиксель с картинки, раскладываем и его: r,g,b
смотрим к какому из заданных 3 цветов он больше всего тяготеет:
)
Вы правы, мысль стоящая, но проблема в том, что пользователь выбирает кол-во цветов, но не выбирает какие- именно должны быть.
0
1090 / 588 / 121
Регистрация: 11.11.2008
Сообщений: 1,544
16.04.2013, 10:38 5
Цитата Сообщение от Vashtanerada Посмотреть сообщение
пользователь выбирает кол-во цветов, но не выбирает какие- именно должны быть.
а зачем так?) ну пусть это будут разные случайные цвета, если без разницы)

Добавлено через 9 минут
хотя понял...
тогда сложнее... надо либо заставлять юзера тыкать на картинке на цвета которые он хочет оставить так сказать
либо делать анализ цветов картинки и принимать како-то решение.
в общем вариантов может быть много и не понятно какой юзеру больше всего понравится.
1
LK
16.04.2013, 15:02
  #6

Не по теме:

Цитата Сообщение от Vashtanerada Посмотреть сообщение
Рассказала так, как смогла.
это я о себе.

0
2 / 2 / 1
Регистрация: 29.11.2012
Сообщений: 143
10.05.2013, 20:44  [ТС] 7
Хотелось бы, не множество вариантов, а только один. В частности, как мне представляется, задается необходимое максимальное количество цветов и остается это количество, ну, либо несколько меньшее.
Берем спектр цветов по каждой составляющей (R, G, B), разбиваем его на количество отрезков, совпадающее с заданным числом цветов. Затем определяем отрезок,в который попадает значение R, G, B, изменяем взятое значение на среднее по отрезку и получаем ограниченное количество цветов. Но если брать все множество цветов, то бишь 16777215, то действительно получаем количество цветов которое нужно пользователю, но цвета абсолютно сюриалистичные.
Вставляю код, в котором цвета получаются более близкие, но их количество получается несколько больше требуемого количества.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
//// ccol - кол-во цветов  cpix - исходный цвет
int ar;//Переменная для записи цвета. Название просто так.
int clrs;
int r,g,b,mc;
clrs=255/ccol;//Ступень цвета, шаг значений,
        //кол-во любого цвета может быть от 0 до 255
        // все это и делим на участки, сколько
        //оттенков хотим получить.
mc=0;//Начало первого участка спектра
        // (в спектре учитывается только кол-во красного)
ar=OneColor(cpix,'R');//Количество красного в цвете
for (int i=1;i<=ccol;i++)
        {
        //Если красного больше чем в начале участка
        //и меньше чем в конце (i*clrs),
        if ((ar>=mc)&&(ar<=i*clrs))
                //красный = (начало уч-ка+конец уч-ка)/2:
                {r=(mc+i*clrs)/2;break;}
        //Начало следующего участка
        mc=clrs*i;
        }
//Повторяем для оставшихся 2-х цветов:
mc=0;
ar=OneColor(cpix,'G');
for (int i=1;i<=ccol;i++)
        {
        if ((ar>=mc)&&(ar<=i*clrs))
                {g=(mc+i*clrs)/2;break;}
        mc=clrs*i;
        }
mc=0;
ar=OneColor(cpix,'B');
for (int i=1;i<=ccol;i++)
        {
        if ((ar>=mc)&&(ar<=i*clrs))
                {b=(mc+i*clrs)/2;break;}
        mc=clrs*i;
        }
//Смешиваем цвета и возвращаем готовый полный цвет:
return FullColor(r,g,b);
0
10.05.2013, 20:44
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
10.05.2013, 20:44
Помогаю со студенческими работами здесь

Как ограничить количество цветов в изображении
Доброго времени суток уважаемые пользователи киберфорума! Подскажите пожалуйста как реализовать...

Уменьшить количество цветов картинки!
Добрые люди, как можно решить задачу! во всем интернете только одна страница с трезвым ответом,...

Есть н цветов разных видов. Составьте все возможные сочетания букетов из всех этих цветов. Количество цветов и их названия вводит пользователь
Есть n цветов разных видов. Составьте все возможные сочетания букетов из всех этих цветов....

Распознание цветов на изображении
Здравствуйте! Как можно реализовать подсчет участков изображения по определенным цветам? То есть,...

Распознавание цветов на изображении
Добрый день, дорогие форумчане. Вопроса, собственно, у меня нет никакого. Есть информация, может...

Замена цветов в bmp-изображении
Здравствуйте. Написал простенький код замены цветов в изображении. Вот: ...


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

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru