Как сделать изображение черно белым opencv

Добавил пользователь Евгений Кузнецов
Обновлено: 05.10.2024

В предыдущих главах мы обсуждали, как читать входное изображение в виде различных типов (двоичный файл, оттенки серого, BGR и т. Д.). В этой главе мы узнаем, как преобразовать один тип изображения в другой.

Класс с именем Imgproc пакета org.opencv.imgproc предоставляет методы для преобразования изображения из одного цвета в другой.

Преобразование цветных изображений в оттенки серого

Метод с именем cvtColor () используется для преобразования цветных изображений в оттенки серого. Ниже приводится синтаксис этого метода.

Этот метод принимает следующие параметры —

src — матрица, представляющая источник.

dst — матрица, представляющая пункт назначения.

code — Целочисленный код, представляющий тип преобразования, например, RGB в оттенки серого.


В этом уроке мы узнаем, как мы можем выполнять обработку изображений с использованием языка Python. Мы не собираемся ограничиваться одной библиотекой или структурой; однако есть одна, которую мы будем использовать чаще всего, - библиотека Open CV. Мы начнем с небольшого разговора об обработке изображений, а затем перейдем к рассмотрению различных приложений / сценариев, где обработка изображений может оказаться полезной. Итак, начнем!

Что такое обработка изображений?

Зачем нам это нужно?

Данные, которые мы собираем или генерируем, в основном представляют собой необработанные данные, т.е. они не подходят для непосредственного использования в приложениях по ряду возможных причин. Поэтому нам нужно сначала проанализировать его, выполнить необходимую предварительную обработку, а затем использовать ее.

Например, давайте предположим, что мы пытались создать классификатор котов. Наша программа будет принимать изображение в качестве входных данных и затем сообщать нам, содержит ли изображение кошку или нет. Первым шагом для построения этого классификатора было бы собрать сотни фотографий кошек. Одна общая проблема заключается в том, что все скопированные нами изображения не будут иметь одинаковый размер, поэтому перед передачей их в модель для обучения нам потребуется изменить их размер / предварительно обработать до стандартного размера.

Это только одна из многих причин, по которым обработка изображений необходима для любого приложения компьютерного зрения.

Предпосылки

Прежде чем идти дальше, давайте обсудим, что вам нужно знать, чтобы легко следовать этому учебнику. Во-первых, вы должны иметь базовые знания программирования на любом языке. Во-вторых, вы должны знать, что такое машинное обучение и как оно работает, поскольку в этой статье мы будем использовать некоторые алгоритмы машинного обучения для обработки изображений. В качестве бонуса было бы полезно, если бы вы имели какое-либо представление или базовые знания об Open CV, прежде чем продолжить изучение этого урока. Но это не обязательно.

Чтобы следовать этому уроку, вы должны определенно знать, как именно изображение представляется в памяти. Каждое изображение представлено набором пикселей, то есть матрицей значений пикселей. Для изображения в градациях серого значения пикселей варьируются от 0 до 255, и они представляют интенсивность этого пикселя. Например, если у вас есть изображение размером 20 x 20, оно будет представлено матрицей 20 x 20 (всего 400-пиксельных значений).

Если вы имеете дело с цветным изображением, вы должны знать, что оно будет иметь три канала - Красный, Зеленый и Синий (RGB). Следовательно, было бы три таких матрицы для одного изображения.

Установка

Примечание. Поскольку мы собираемся использовать OpenCV через Python, подразумевается, что на вашей рабочей станции уже установлен Python (версии 3).

Monro

Для множества алгоритмов распознавания требуется истинное черно-белое изображение. То есть такое, которое содержит только черный, и только белый, цвета. Зачем это нужно и как его получить очень быстро, давайте и поговорим.

Зачем нужно черно-белое изображение?

В начале любого распознавания необходимо провести предварительную обработку. И конечным пунктом обработки зачастую является получение черно-белого изображения.

А фото, как черно-белое изображение, подойдет?

Более того, даже если рисунок выглядит, как истинно черно-белый, это может оказаться не так и нарушить работу алгоритма. Результат работы на любом изображении без предварительной подготовки непредсказуем.


Картинки кликабельны.

А в чем проблема?

Проблема как обычно — в скорости. Допустим, надо обрабатывать видеопоток в реальном времени. Можно потратить уйму времени на поиск готового решения или библиотеки. Хотя, все как обычно, есть под рукой. Надо просто суметь все это вкусно приготовить. Вот в этом и проблема.

Общий подход к подготовке изображения

Вначале надо перевести изображение в оттенки серого. Нам не нужны значения по всем каналам, хочется работать с одним параметром — и это будет яркость. Как сделать изображение в оттенках серого, описано тут. Отбросим пугающее слово Direct2D, нам просто нужны коэффициенты.

Далее, возможно, надо сделать легкое размытие, чтобы мостики, связывающие разные кляксы, стали тоньше и более слились с фоном. Возможно надо что-то сделать с общей яркостью, применить фильтр резкости и т.д. Не суть. В каждом случае — это набор кадров, имеющих некое одно общее свойство. Освещенность, размытость, перекос. Набор мероприятий с изображением зависит от каждого конкретного случая применения.

В конце концов нужно пройтись по всему битмапу, и если яркость пикселя больше некоего порога, сделать его белым, если меньше — черным. Или наоборот. Большинство алгоритмов работает из предположения, что фон — черный. Это логично, потому что черный цвет — это ноль для компьютера. Микроснимки вируса существуют, как правило, на белом фоне. Вот как раз для таких случаев нужно инвертировать фон в черное, а темный вирус — в белое.

На этом шаге должны исчезнуть все незначительные мостики между интересующими объектами. Если этого не произошло — вернуться назад и еще поработать с изображением.

Bitmap

В Delphi есть такой класс — TBitmap. Который позволяет работать с битовой матрицей любого формата быстро и правильно. Просто надо ухватить начало массива данных и работать с ним как с указателем. Давайте для начала приведем любое изображение к оттенкам серого.

Получить изображение в оттенках серого

Оттенки серого получаются, когда значения всех каналов равны. Если цвет — это комбинация красного(R), зеленого(G) и синего(B), то при значении всех каналов R=128, G=128, B=128, получим вот такой серый цвет , при значений всех каналов 191 — такой

Рассмотрим два пути. В первом, значения всех каналов суммируются и результат делится на 3. Во-втором, значение каждого канала необходимо умножить на некий свой коэффициент и сложить..

Таких коэффициентов на самом деле масса разновидностей. Рассмотрим два варианта.

Здравствуйте. Есть черно-белая картинка (именно черно-белая, а не оттенки серого), нужно её инвертировать.

Поиск в FAQ ничего не дал.

Код, преобразующий цветную картинку в черно-белую.
У меня простой код, но он чё то глючит: ------------ Dim Color As Byte Private Sub.

Как в Windows XP выставить черно-белую тему?
Не только рисунок для рабочего стола имеется ввиду. Нужно, чтобы фон папок и программ открываемых.

KYOCERA ECOSYS M6026cdn не переключает на черно-белую печать
Добрый день. Принтер KYOCERA ECOSYS M6026cdn, цветной. Задача: поставить принтер в режим.


Opencv черно-белое изображение
Считываю изображение - перевожу его в черное-белое, вывожу в label, а оно странно отображается.


Инвертировать картинку
делаю графический редактор, нужно инвертировать картинку, изменить размер, сделать ее черно-белой.

Как в TImage сделать картинку черно белой?
Всем добра. Подскажите пожалуйста как в среде программирования Delphi,загруженную картинку в.

Как вывести картинку из OpenCV?
Привет. Помогите идеей или кодом. Смысл в чем. Я написал программу в vs2017 release x64 c.

Читайте также: