как преобразовать цветное изображение в оттенки серого в C или C++
как преобразовать цветное изображение в оттенки серого в C или C++ ?
Все присутствующие здесь потоки дают решение на языке Си#
:) :
0. Любой цвет может быть представлен в виде 3D-вектора с координатами (r, g, b)
1. По любому ж/б цвет является достоверным (р == г == Б)
2. Любой вектор имеет длину
3. Любой преобразованный вектор w/b имеет ту же длину, что и исходный
4. Любой пиксел имеет цвет
Смотреть также[^]
void convert(CImage* pcImage) { ASSERT(pcImage); int iWidth(pcImage->GetWidth()); int iHeight(pcImage->GetHeight()); if (iWidth && iHeight) { for (int i = 0; i < iWidth; i++) { for (int j = 0; j < iHeight; j++) { COLORREF clrOriginal(pcImage->GetPixel(i, j)); float fR(GET_R(clrOriginal)); float fG(GET_G(clrOriginal)); float fB(GET_B(clrOriginal)); float fWB = sqrt((fR * fR + fG * fG + fB * fB) /3); pcImage->SetPixel(i, j, RGB(fWB, fWB, fWB)); } } } }
можете ли вы предоставить код на языке C или C++ для преобразования цветного изображения в оттенки серого
Я бы так и сделал
fWB = sqrt(fR * fR + fG * fG + fB * fB)/3;
вместо.
Спасибо,
но 3*(fWB * fWB) = (fR * fR + fG * fG + fB * fB) , не так ли ? :)
Извини, не бери в голову. Мне нужно больше кофеина.
5 ЕД!
5!
Преобразование цветов в серые оттенки[^]
Преобразование RGB в серую шкалу без использования указателей[^](Пара советов/трюков в C#)
5 ЕД!
Обратите внимание, что каждый элемент цвета имеет коэффициент, определяющий, сколько входных данных он должен иметь в конечном значении пикселя.
Однако следующий код напрашивается на оптимизацию. Здесь нет необходимости использовать математику с плавающей запятой.
byColor = ( GetRValue(cr) * 0.30 ) +
( GetGValue(cr) * 0.59 ) +
( GetBValue(cr) * 0.11 );
Мы можем сделать это со всеми целыми числами. Мы можем умножить коэффициенты на 1024, затем сделать математику и сдвиг на 10, чтобы подделать деление на 1024...
byColor = (((int) GetRValue(cr) * 307 ) +
( (int) GetGValue(cr) * 604 ) +
( (int) GetBValue(cr) * 113 )) >> 10;
"Точными" цветовыми весами являются:
0.299083 0.585841 0.114076