насколько я понимаю ваш вопрос, вы в основном пытаетесь обнаружить края карты? Или вы пытаетесь полностью отделить карту (т.е. вырезать) от изображения?
Использование гаммы просто меняет видимый контраст всего изображения после преобразования его в серый. OpenCV имеет множество собственных процедур обнаружения краев и объектов, так как я предполагаю, что вы пытаетесь выполнить предварительную обработку, чтобы помочь?
A КОНЦЕПЦИИ (не код) ОТВЕТ:
ОТДЕЛЬНЫЕ КАНАЛЫ
Позвольте мне указать вам другое направление. Если входные изображения всегда цветные, рассмотрите возможность использования только одного из трех цветовых каналов RGB. Вот пример:
КРАСНЫЙ КАНАЛ:
ЗЕЛЕНЫЙ КАНАЛ:
СИНИЙ КАНАЛ:
Обратите внимание, насколько больше контраст у синего канала относительно красного канала. В зависимости от содержимого изображения, вы обычно обнаружите, что один канал имеет лучшее разделение для нужного объекта.
Если вы посмотрите на гистограмму:
Вы можете видеть, что синий канал имеет наибольшее расстояние между пиками справа (желаемый объект) и левым пиком (яркое пятно на столе). Но в красном канале все сгруппировано посередине.
В качестве идеи вы могли бы использовать обнаружение пика / местоположение пика / расстояние между пиками, чтобы программно определять относительные контрасты в каждом цветовом канале.
Вы также можете определить, какой цветовой канал имеет свою вершину, самую дальнюю от того же пика в другом канале, а затем СУБТРАКТИТЬ или использовать РАЗНИЦУ или РАЗДЕЛИТЬ два канала (пример этого приведен ниже в разделе «Канальная математика»).
Скатерть
Теперь у скатерти очень контрастный рисунок: белый (серый) светлее идентификационной карты и зеленый - темнее карты. Карта в основном между.
Используя инструмент кривых из графического редактора для предоставления графического примера, вы можете увидеть, что, закрепив нижний И верхний уровни на черном, вы можете изолировать среднюю карту.
Но опять же обратите внимание на гистограмму:
В то время как в средних значениях сгущается почти все, КРАСНЫЙ канал имеет небольшой пик около черного. Используя это в качестве руководства, мы отключаем зеленый и синий каналы, а затем значения CLAMP ниже и значения выше диапазона значения карты.
Изогнутый инструмент:
И затем только результирующий красный канал - обратите внимание, что он инвертирован, чтобы сделать результирующий контраст более четким:
* * 1 089 * 1090 СУЩНОСТЬ *
Таким образом, суть этих концепций изоляции заключается в
- Изучите каждый цветовой канал, чтобы определить, какой из них имеет лучший контраст. Это будет искать пик, который больше всего отличается от других каналов И / ИЛИ ищет пики в канале с самой широкой «долиной» между ними.
- Зафиксируйте низкие и высокие значения, чтобы изолировать нужный объект. Это будет использовать пики, найденные в A, с порогом, чтобы определить точки, которые нужно закрепить и нарастить до нужного изображения.
Проблема только с использованием общей настройки «гаммы» заключается в том, что вы будете перетаскивать все изображение вокруг, чтобы изменить кажущийся контраст, когда то, что вы действительно пытаетесь сделать, это устранить (зажать) части изображения, которые не актуальны.
Хотя я понимаю, что это не совсем то, о чем вы просили, я все же надеюсь, что это было полезно. Кроме того, я бы посоветовал проверить больше функций обнаружения в OpenCV, если вы еще этого не сделали.
БОНУС: УДОВОЛЬСТВИЕ С КАНАЛЬНОЙ МАТЕЙЦЕЙ
Это может иметь или не иметь полезности для вас, но умножение, деление, вычитание, различие, исключение между цветовыми каналами иногда может помочь избавиться от нежелательных фоновых объектов. Возьмите скатерть и узор.
Позволяет умножить ЗЕЛЕНЫЙ и СИНИЙ каналы и получить ЭТО:
Теперь можно разделить по КРАСНОМУ каналу
Теперь настройте ГАММУ КРАСНОГО канала, чтобы устранить скатерть (Гамма, отрегулированная на 1,57):
С этим результирующим изображением:
Что, конечно, может иметь дальнейшее усиление контраста теперь, когда рисунок скатерти исчез.