Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Программирование [игнор отключен] [закрыт для гостей] / Сделать Ч-Б изображение / 5 сообщений из 5, страница 1 из 1
05.01.2007, 15:47
    #34238479
Aklin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сделать Ч-Б изображение
как сделать Ч-Б изображение, имея RGB матрицу? где-то была формула, мол R*128+G*20+... /3
но это не проходит.

аффтопитезь
...
Рейтинг: 0 / 0
05.01.2007, 16:53
    #34238598
Konstantin Permyakov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сделать Ч-Б изображение
...
Рейтинг: 0 / 0
05.01.2007, 22:36
    #34239017
alex_k
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сделать Ч-Б изображение
ja delal tak
(R+G+B)/3

vygljadelo neploho, hotja eto ne sovsem to...
...
Рейтинг: 0 / 0
06.01.2007, 01:46
    #34239122
White Owl
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сделать Ч-Б изображение
В самом примитивном варианте:
Y = 0.2126 R + 0.7152 G + 0.0722 B
или
Y = 0.299 R + 0.587 G + 0.114 B
...
Рейтинг: 0 / 0
06.01.2007, 11:50
    #34239224
Shtock
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сделать Ч-Б изображение
применить пиксельный шейдер

uniform vec2 bw;
uniform sampler2D tex;
const vec3 lumCoeff = vec3(0.2125, 0.7154, 0.0721);

void main()
{
vec4 texture = texture2D(tex, gl_TexCoord[0]);
vec2 lum_v=vec2(1.0, dot(texture.xyz, lumCoeff));
vec3 lum=vec3(dot(lum_v, bw));
gl_FragColor=vec4(lum, texture.w); // сохраним альфу из оригинальной текстуры
}

или

// m_iWidth & m_iHeight - текущее разрешение экрана
#define m_iWidth 640
#define m_iHeight 480

// нам потребуются 2 буффера:
m_pFrame = new ubyte [m_iWidth*m_iHeight*3];
m_pBuffer = new ubyte [m_iWidth*m_iHeight*3];

void ReplaceBW (float fValue)
{
if (!fValue || !m_pFrame || !m_pBuffer) // если fValue == 0, значит изображение полностью цветное
return;

glDisable(GL_TEXTURE_2D);

if (fValue <= 1.0f)
{
// 1. get image from screen
glFlush();
glFinish();
glReadPixels (0, 0, m_iWidth, m_iHeight, GL_RGB, GL_UNSIGNED_BYTE, m_pFrame);

// 2. convert to bw
int j = 0, k = int(fValue*255.0f), s = 0, r, g, b;
for (int i=0; i<m_iWidth*m_iHeight; i++)
{
r = m_pFrame[j];
g = m_pFrame[j+1];
b = m_pFrame[j+2];
s = (r + 2*g + b)*k >> 2; // "реальное" соотношение 0.3*r + 0.59*g + 0.11*b, зато это намного быстрее
m_pBuffer[j+0] = (r*(255-k) + s) >> 8;
m_pBuffer[j+1] = (g*(255-k) + s) >> 8;
m_pBuffer[j+2] = (b*(255-k) + s) >> 8;
j += 3;
}
}

// 3. draw to frame buffer
glRasterPos2i(-m_iWidth/2, -m_iHeight/2);
glDrawPixels(m_iWidth, m_iHeight, GL_RGB, GL_UNSIGNED_BYTE, m_pBuffer);
}
...
Рейтинг: 0 / 0
Форумы / Программирование [игнор отключен] [закрыт для гостей] / Сделать Ч-Б изображение / 5 сообщений из 5, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]