BYTE pcl::Kinect2Grabber::RGBToGreyScale(BYTE r, BYTE g, BYTE b){ double R_linear = sRBG_to_linear(r / 255.0); double G_linear = sRBG_to_linear(g / 255.0); double B_linear = sRBG_to_linear(b / 255.0); double gray_linear = 0.2126*R_linear + 0.7152*G_linear + 0.0722*B_linear; return round(linear_to_sRGB(gray_linear) * 255); }
virtual void apply (float *data, int width, int height, int channels, stride_t chanstride, stride_t xstride, stride_t ystride) const { if (channels > 3) channels = 3; for (int y = 0; y < height; ++y) { char *d = (char *)data + y*ystride; for (int x = 0; x < width; ++x, d += xstride) for (int c = 0; c < channels; ++c) ((float *)d)[c] = linear_to_sRGB (((float *)d)[c]); } }