Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[3.17.190.143] |
|
Страницы: (2) [1] 2 все ( Перейти к последнему сообщению ) |
Сообщ.
#1
,
|
|
|
Как сделать цветное изображение чёрно-белым?
|
Сообщ.
#2
,
|
|
|
изменить палитру.
|
Сообщ.
#4
,
|
|
|
Дак там так не до чего и дошли!
Что значит изменить палитру? |
Сообщ.
#5
,
|
|
|
Думаю, ему надо просто rgb->grayscale. Если точность не нужна - то просто (r+g+b)/3.
|
Сообщ.
#6
,
|
|
|
r: byte = getRvalue(OldColor)
g: byte = getGvalue(OldColor) b: byte = getBvalue(OldColor) C: byte = sqrt(r*r+g*g+b*b) NewColor: TColor = RGB(C, C, C) |
Сообщ.
#7
,
|
|
|
Я имею ввиду черно-белое (2 цвета). Наверное это называется монохромное.
|
Сообщ.
#8
,
|
|
|
Тогда тебе нужно узнать, что такое алгоритм floyd-steinberg, и dithering - это два наиболее подходящих метода для такого преобразования. Если тебе нужно преобразовывать контурные контрастные изображения (типа рисунок карандашом) - то можно и порогом (яркость ниже значения - 0, иначе 1).
|
Сообщ.
#9
,
|
|
|
http://ivr.webzone.ru/articles/bw/
http://www.visgraf.impa.br/Courses/ip00/proj/Dithering1/floyd_steinberg_dithering.html вот тут почитай, тебе этой инфы 100\% хватит:) |
Сообщ.
#10
,
|
|
|
Я прочитал английский алгоритм, но не понял ничего. Может кто разобрался, объяснит мне?
|
Сообщ.
#11
,
|
|
|
Если f/s для тебя сложен - сделай dithering. Это очень просто. Метод описан в статье по первому линку.
|
Сообщ.
#12
,
|
|
|
Попытался разобраться в английском алгоритме. У меня возникло несколько вопросов:
1) Если у меня пискел с яркорстью 90 (при палитре 0..255), то ошибка для него будет (90 div 127)*255-90 ( (x div 127) * 255 будет давать 0 если x<127 или 255, если x>=127 [пороговая оценка]; (x div 127)*255-90), как написанно в алгоритме это ошибка) ??? 2) Я беру левый верхний пиксел, считаю для него ошибку, потом к соседнему правому добавляю 7/16 ошибки, и т.д.: X 7 ? 5 1 ? ? ? ? А что дальше, как обрабатывать пикселы указанные вопросом? Опять прибавлять ошибки от следующих пикселов по таблице? |
Сообщ.
#13
,
|
|
|
Ой, я уже и не помню... Вот тебе кусок кода на С++, как я это делал:
for(aa=0;aa<192;aa++) { for(bb=0;bb<256;bb++) { if(brtab[aa][bb]>=128) { scrbw[aa][bb]=1; erro=255; } else { erro=0; scrbw[aa][bb]=0; } erro=brtab[aa][bb]-erro; brtab[aa][bb+1]+=(7*erro)>>4; brtab[aa+1][bb-1]+=(3*erro)>>4; brtab[aa+1][bb]+=(5*erro)>>4; brtab[aa+1][bb+1]+=(erro>>4); } } Размер изображения тут 192х256, в byte brtab[193][257] - яркости точек (на строку и столбец больше изображения, лишние ячейки - в 0). Условие заносит либо 1 либо 0 в матрицу получаемого монохромного растра. |
Сообщ.
#14
,
|
|
|
Попробовал реализовать указанный алгоритм. Всё работает, но результат не очень.
Я реализовывал тот же самый алгоритм, только ошибка прибавлялась уже при обработке конкретного пиксела, а не заносилась в таблицу. В общем то тоже самое, но изображения получились очень разные. А нельзя ли всю программу (мне важно исходное изображение и результат после обработки)? |
Сообщ.
#15
,
|
|
|
Всю программу дать не смогу (большая и без комментариев:). Тебе надо видеть, какое изображение из какого должно получиться? Могу кинуть картинки.
Чтобы результат получался приемлимым, нужно сделать ручную регулировку яркости и контраста. |