Основной алгоритм уменьшения цвета в OpenCV

0

Вот формула для базового уменьшения цвета в OpenCV, которую я читал в книге.

//p is the value of the channel of a pixel
//n is the reduction factor
p = (p/n)*n + n/2; //integer division

Я понимаю, что первое выражение (p/n)*n является первым кратным n меньшим или равным p. Я думаю, что этого достаточно для уменьшения цвета на коэффициент n. Но я не понимаю, что нужно добавить n/2 к нему.

А также, если p=255 и n=5, эта формула будет пытаться установить p = 257, не будет ли она переполнять диапазон p?

Пожалуйста, объясни.

  • 0
    Не могли бы вы добавить название книги? (p / n) * n вообще не имеет смысла.
  • 1
    Руководство по программированию приложений OpenCV 2 Computer Vision - Роберт Лаганьер
Показать ещё 2 комментария
Теги:
opencv
algorithm
colors

2 ответа

1

При n=255, (((p)/n)*n) вернет 0 для p <255 и 255 для p == 255.

Чтобы быть сбалансированным, вы хотели бы вернуть 0 для p <128 и 255 для p> = 128. Этого можно достичь с помощью:

((p + n/2) / n) * n

Это немного похоже на ((p/n) + 0.5) * n, за исключением того, что вы, очевидно, не можете этого сделать. Эффект заключается в том, чтобы дать округление вместо усечения по результату p/n. На самом деле это работает только для некоторых значений n.

Легкий способ получить именно то, что вы хотите, - это использовать таблицу поиска.

Я согласен ((p)/n)*n + n/2 имеет проблемы, как указано в old-ufo

  • 0
    Этот метод дает очень странный результат, появляются новые цвета, метод, указанный в книге, работает хорошо, я просто не могу этого понять.
  • 0
    Я проверю это
0

Говорят, что n/2 необходимо для "центральной" позиции вместо минимума, но вы правы, похоже, что это не нужно. Предположим, что я хочу иметь 2 цвета - черно-белый, поэтому n = 255. Без n/2 в результате получилось бы 0 и 255. С n/2 - 127 и 382, что кажется неправильным.

  • 0
    Да, не могу понять, почему они положили н / 2 там.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню