(Ранее по теме:
1,
2)
Место действия: Intel Performance Primitives Library.
RGBToGray
Converts an RGB image to gray scale
using fixed transform coefficients.
IppStatus ippiRGBToGray_<mod>(const Ipp<datatype>* pSrc, int srcStep,
Ipp<datatype>* pDst, int dstStep, IppiSize roiSize);
[…]
This function uses the following basic equation to compute luma from non-linear gamma-corrected red, green, and blue values:
Y′ = 0.299 * R′ + 0.587 * G′ + 0.114 * B′
Note that the transform coefficients conform to the standard for the NTSC red, green, and blue CRT phosphors.
[…]
What’s wrong with this picture?
Да всё вроде правильно излагают.
Вот только, когда реально в программе это заюзаешь, будешь думать, почему grayscal’ится не так, как в других программах.
А когда засунешь в неё тестовый пример с красным квадратом, синим кругом и зелёным треугольником, то окажется, что красный квадрат стал темнее синего круга темнее зелёного треугольника. А должно быть наоборот, синий темнее красного темнее зелёного.
Потому что кто-то перепутал синий с красным — порядок байт. И не проверил, что функция ведёт себя как заявлено.
Придётся откатываться на ippiColorToGray, которая даёт задавать коэффициенты. Но вообще тенденция нездоровая.