Компьютерное зрение - это междисциплинарная область, которая занимается получением высокого уровня понимания с помощью изображений и видео. Если мы посмотрим на это с инженерной точки зрения, он используется для автоматизации задач, которые может выполнять человеческое зрение. Например, распознавать определенную часть изображений, различать изображения и понимать вещи, о которых человеческий мозг может думать после визуализации объекта. В наши дни компьютерное зрение полезно в искусственном интеллекте и программировании роботов, в которых нам нужна техника человеческого зрения, чтобы распознавать окружающую среду и предпринимать действия в соответствии с ней. В языках программирования у нас было много модулей для работы с компьютерным зрением, но самый известный из них - OpenCV.

Это библиотека программных функций, в основном предназначенных для компьютерного зрения в реальном времени. Первоначально разработанный Intel, позже он был поддержан Willow Garage, а затем Itseez. Этот язык создан с использованием C++/C языка, что делает его более быстрым и легким в использовании. Мы рассмотрим, как мы можем использовать модуль OpenCV в Python, и узнаем некоторые безумные вещи, которые может делать OpenCV.

Установка:

Вам нужна последняя версия python, вы можете загрузить ее с официального сайта python, а затем скопировать следующий код и вставить его в командную строку, и он автоматически установит модуль python-OpenCV в вашей системе.

pip install opencv-python

Основы OpenCV:

загрузка изображения:

Чтобы прочитать изображение с вашего диска в OpenCV, вам необходимо использовать функцию cv2.imread, которая будет читать изображение в формате RGB.

Мы загрузили модуль python-OpenCV name cv2, затем использовали функцию cv2.imread и передали имя изображения, которое мы хотим прочитать. Изображение может быть в любом формате изображения png, jpeg, jpg и т. Д.

Отображение изображения:

Отображение изображения в python-OpenCV так же просто, как чтение изображения, для которого мы использовали cv2.imshow метод, передав изображение, которое мы читаем, и после этого мы использовали метод cv2.waitKey, чтобы программа ждала, пока не покажет нам изображение, для которого мы передаем целочисленное значение, представляющее секунды в cv2.waitKey, и затем мы использовали метод cv2.destroyAllWindows, чтобы уничтожить открытое окно, которое показывает нам изображение.

Запись изображения:

Для записи изображения в python-OpenCV использовался метод cv2.imwrite (), который принимает два параметра: один - это изображение, которое мы читаем в OpenCV, а второй - имя изображения с его расширением, которое мы хотим вывести.

Обработка изображения:

Изменение размера изображения:

Изменение размера изображения относится к масштабированию изображения, оно пригодится, когда вы хотите уменьшить размер изображения, уменьшив его количество пикселей. Как мы знаем, пиксели распределены как координаты X и Y изображения, поэтому мы можем использовать эти точки X и Y, чтобы сообщить OpenCV об уменьшении пикселей и изменении размера изображения.

Мы импортировали модуль cv2, который называется модулем python-OpenCV, и затем мы прочитали изображение с именем python.png и установили scale_precent на 60%, потому что мы собираемся уменьшить масштаб нашего изображения до 60%, а затем уменьшить высоту и ширину изображения, умножив его на scaling_percent и разделив на 100, а затем мы использовали функцию cv2.resize(), минуя изображение, которое мы читаем, и новое измерение.

Размытие изображения:

Теперь сделаем изображение размытым, используя технику размытия OpenCV. В модуле OpenCV было 3 метода размытия: размытие по Гауссу, медианное размытие, двусторонняя фильтрация.

Если вы видели Код, в котором мы использовали 4 разные функции cv2.blur, который является простым усредняющим режимом размытия, cv2.GaussianBlur, cv2.MedianBlurr, cv2.bilateralFilter blur, одна общая черта во всех этих методах размытия - это размер ядра, который мы передаем в качестве аргумента. с изображением, к которому мы применяем фильтр размытия. Ядро сообщает вам, как изменить значение любого заданного пикселя, комбинируя его с различным количеством соседних пикселей.

Оттенки серого в изображении:

Вызов изображения серым цветом - это процесс преобразования изображения из других цветовых пространств, таких как RGB, CYMK, в оттенки серого, поскольку он варьируется между черным и белым цветами. Вызов серого полезен, когда вы хотите обучить искусственный интеллект на изображении или вы хотите снизить сложность распознавания изображения, потому что, когда мы снизили масштаб изображения до серого, оно стало одним каналом цвета, но в режиме RGB он имеет 3 цветовых канала. Например, вы хотите обучить нейронное изображение с размером 10x10x3 в режиме RGB, оно будет иметь 300 узлов слоев, а то же изображение с масштабированием серого будет иметь 100 узлов слоев. Существует множество преимуществ масштабирования серого изображения, таких как уменьшение шума при чтении текста, обнаружение краев и т. Д.

Мы используем cvtColor(), чтобы преобразовать изображение в оттенки серого, минуя имя переменной изображения и cv2.COLOR_BGR2GRAY метод в ней.

Создать границу вокруг изображений:

В модуле OpenCV мы использовали функцию cv2.copyMakeBorder()a, чтобы сделать рамку вокруг изображения такой же, как рамка изображения. Проверьте приведенный ниже код

Обнаружение края:

Обработка обнаружения изображения включает обнаружение резких краев изображения. Это обнаружение краев важно в контексте распознавания изображений или обнаружения объектов. Существует несколько алгоритмов обнаружения ребер в связи с их широкой применимостью. Мы будем использовать один из таких алгоритмов, известный как Canny Edge Detection.

Итак, если вы видели код, мы снова использовали imread() функцию для чтения изображения, а в следующей строке мы использовали cv2.Canny, передав изображение, которое мы используем, и размер пикселей, которые мы должны обнаружить. Передаваемое нами измерение имеет формат width x height.

Простой порог:

Пороговая обработка - это метод в OpenCV для присвоения значения пикселя пороговому значению. При пороговой обработке значение каждого пикселя сравнивается с пороговым значением. Если значение пикселя меньше порогового значения, оно устанавливается на 0, в противном случае устанавливается максимальное значение (обычно 255). В компьютерном зрении этот метод определения порога применяется к изображениям в градациях серого. Поэтому изначально изображение должно быть преобразовано в цветовое пространство оттенков серого. Базовый метод определения пороговых значений - это двоичное пороговое значение. Для каждого пикселя применяется одно и то же пороговое значение. Если значение пикселя меньше порогового значения, оно устанавливается на 0, в противном случае устанавливается максимальное значение.

В Python OpenCV мы использовали функцию cv2.threshold, передавая изображение, в котором мы работаем, значение пикселей и заданное значение, а 4-й аргумент будет режимом порога. Если вы видите строку кода 14–16, мы устанавливаем 3 типа порогового режима Binary, Trunc и Tozero, а также выбираем, если значение пикселей изображения равно 120, а затем устанавливаем его на 255.

Рисование изображений с использованием OpenCV:

Обработка изображений - это метод восстановления поврежденных фотографий или шума, обводки текста на фотографиях. Это особенно полезно для восстановления старых фотографий с царапинами или чернильными пятнами. Рисование изображения обычно работает путем замены мертвых пикселей соседними похожими пикселями, поэтому они смешиваются с фоном. В python openCv мы использовали метод cv2.inpaint, используя два режима рисования FMM (Fast Marching Method) и Navier-Strokes. мы можем использовать cv2.INPAINT_TELEA для FMM и cv2.INPAINT_NS для штриха Навье.

Если вы видели код eh, я также читал изображение mask.png, это изображение черной обложки, которое будет работать как маска, на которой любой поврежденный пиксель будет отображаться в белом цвете, а затем OpenCV может заменить его соответствующими окружающими пикселями.

Перевод изображения:

Перевод относится к прямолинейному перемещению объекта, то есть изображения из одного места в другое. Если мы знаем величину сдвига по горизонтали и вертикали, скажем (tx, ty), то мы можем составить матрицу преобразования.
где tx обозначает сдвиг по оси x, а ty обозначает сдвиг по оси y- ось, то есть количество пикселей, на которое нам нужно сместиться в этом направлении.
Теперь мы можем использовать функцию cv2.wrapAffine() для реализации этих переводов.

Преимущества перевода:

  • Скрытие части изображения
  • Обрезка изображения
  • Перенос изображения в любую точку
  • Анимация изображения с помощью циклического перевода изображений.

Я сделал две новые переменные с именами четверть высоты и четверти ширины, потому что мы переведем наше изображение в эту высоту и ширину, а затем в следующей строке я использовал np.float, который является функцией NumPy для преобразования нашего изображения в формат 2x3, а затем использовал функцию warpAffine передавая размер изображения 2x3. Пройдите тест на любом изображении и увидите разницу.

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