Вы дали слишком мало информации. Прежде всего, какой формат изображения обеспечивает ваша камера? Это какой-то формат RAW, JPEG или что-то еще?
Это делается программно (например, с использованием C):
Лучшим способом было использовать некоторую библиотеку загрузки изображений (например, SDL_image) и загрузить изображение в память, а несжатый RGB - целевой формат. Если у вас есть несжатый формат изображения RGB, вы можете сделать что-то вроде
// bufPtr points to the start of the memory containing the bitmap
typedef unsigned char byte;
struct rgb { byte red, green blue; } * colorPtr = bufPtr;
for (int i = 0; i < bufSize; i++, bufPtr++) {
byte gray = (unsigned char) (((float) bufPtr->red * 0.3f +
(float) bufPtr->green * 0.59f +
(float) bufPtr->blue * 0.11f)) / 3.0f * 255.0f + 0.5f);
bufPtr->red = bufPtr->green = bufPtr->blue = gray;
}
Если вы не хотите кодировать, вы можете, например, используйте GIMP, загрузите ваше изображение и примените desaturate из цветового меню. Вы можете установить плагин ufraw для GIMP для загрузки в него изображений в формате RAW. Если вы хотите сохранить всю информацию о цвете в 8 битах (а не использовать 8 бит на канал цвета), в GIMP есть еще одна опция для уменьшения глубины цвета.