3StYleR 0 Жалоба Опубликовано October 26, 2012 Подскажите, пожалуйста, можно ли в OpenCV преобразовать изображение в 4/5/6-битное? Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Smorodov 579 Жалоба Опубликовано October 26, 2012 Что за формат Вам нужен? Встроенной такой функции нет, но можно ведь свою написать. Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
3StYleR 0 Жалоба Опубликовано October 26, 2012 Что за формат Вам нужен? Встроенной такой функции нет, но можно ведь свою написать. хочу в jpeg оставить минимально возможное количество цветов без потери восприятия сюжета. Т.е., чтобы все оттенки зеленого, например, отображались одним цветом. И как я понял, глубина цвета тут, по ходу, не причем Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Smorodov 579 Жалоба Опубликовано October 27, 2012 Тогда можно сделать так: 1) разбить изображение на цветовые плоскости. Mat img; ... vector<Mat> channels; cv::split(img,channels); 2) дальше поразрядное "И" каждого канала с маской, обнуляющей младшие биты (может быть больше подойдет простая бинаризация). что то типа: bitwise_and 3) собрать все на место: cv::merge(channels,img); Цвет правда будет искажаться. Можно просто постеризовать изображение: можно, например так (кусок из gimp-овского кода): dest[RED_PIX] = int (src[RED_PIX] * levels) / levels; dest[GREEN_PIX] = int (src[GREEN_PIX] * levels) / levels; dest[BLUE_PIX] = int (src[BLUE_PIX] * levels) / levels;[/code] levels - количество градаций каждой цветовой плоскости. Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах