автор: Сахил Патель, Пранай Патель
Введение в одну из огромных библиотек с открытым исходным кодом для компьютерного зрения, машинного обучения и обработки изображений.
При интеграции с различными библиотеками, такими как NumPy, python может обрабатывать структуру массива OpenCV для анализа. Чтобы определить шаблон изображения и его различные функции, мы используем векторное пространство и выполняем математические операции над этими функциями.
Установка OpenCV: -
Установите OpenCV с помощью Anaconda:-
Первый шаг — скачать последнюю версию графического установщика Anaconda для Windows с официального сайта. Вам предлагается установить 3.7, работающую с Python 3. После его установки откройте приглашение Anaconda и введите следующую команду.
conda install -c conda-forge opencv
Установите OpenCV в Windows и Mac через pip:-
Необходимо установить Python в систему и установить OpenCV с помощью команды pip:
pip install opencv-contrib-python --upgrade
Мы можем установить его без дополнительных модулей с помощью следующей команды (рекомендуется):
pip install opencv-python
Приведенную выше команду можно использовать при установке библиотеки Python в соответствующей среде Python IDE, такой как VSCODE, PYCHARM и т. д. Перейдя в соответствующую командную строку/терминал среды разработки Python, в которую мы хотим установить, введите эту команду, чтобы загрузить библиотеку:
pip install opencv-python
Некоторые важные функции OpenCV, с которыми мы можем играть с изображениями: -
Чтение и сохранение изображения :-
Изображение Чтение и сохранение изображений являются одними из самых основных операций при редактировании изображений.
Сохранение изображения является очень важным и важным требованием для любой реальной программы. OpenCv дает возможность сохранения как существующих, так и обновленных изображений.
Для чтения используется функция Imread(), а для сохранения изображения используется функция Imwrite().
Помимо Cv2, с помощью таких модулей, как и matplotlib, PIL, urllib и pickle можно использовать для чтения и сохранения изображений.
Код :-
import cv2
#imread() method for reading image
img = cv2.imread(r'/Users/neelpatel/Desktop/sem4/cat.png', 1)
# This will display the image
cv2.imshow('image', img)
cv2.waitKey(3) # This is necessary to be required so that the image doesn't close immediately.
# for saving image
cv2.imwrite('/Users/neelpatel/Desktop/sem 1 to 3/cat_copy.png',img)
print("Image is being saved “)
Выход :-


Так что с помощью Open-cv читать и сохранять файл стало совсем просто.
Поворот изображения:-
Вращение изображения — это одна из основных функций, предоставляемых OpenCv. С помощью вращения конкретное изображение можно поворачивать в соответствии с требованиями пользователя, большинство основных поворотов составляют 90 180 270 градусов.
Параметры: -
Rotate() : используется для указания степени поворота изображения.
Чтобы дать функцию использования 90 градусов
Image = cv2.rotate(src,cv2.cv2.ROTATE_90_CLOCKWISE)
Для 180 градусов
image = cv2.rotate(src, cv2.ROTATE_180)
Для 270 градусов
Image = cv2.rotate(src,cv2.cv2.ROTATE_90_COUNTERCLOCKWISE)
Путь: используется для указания пути к требуемому файлу.
Код для поворота на 180 градусов: -
# importing cv2 import cv2 # path path = r'/Users/neelpatel/Desktop/sem4/parrot.png' # For reading image src = cv2.imread(path) # Output file name window_name = 'Image' # Image will rotate by 180 degrees clockwise image = cv2.rotate(src, cv2.ROTATE_180) # Displaying the image cv2.imshow(window_name, image) cv2.waitKey(0)
Выход:-

Код для поворота на 270 градусов: -
# importing cv2 import cv2 # path path = r'/Users/neelpatel/Desktop/sem4/parrot.png' # For reading image src = cv2.imread(path) # Output file name window_name = 'reverse_parrot' # Image will rotate by 270 degrees clockwise image = cv2.rotate(src, cv2.ROTATE_90_COUNTERCLOCKWISE) # Displaying the image cv2.imshow(window_name, image) cv2.waitKey(0)

Рисование изображений :-
С помощью Opencv мы можем рисовать на изображении различные формы, такие как круг, прямоугольник, эллипс, ломаные линии, выпуклость и т. д. Он используется, когда мы хотим выделить какой-либо объект на входном изображении.
Ниже приведен синтаксис для рисования круга: -
Cv2.circlr(img,центр,радиус,цвет[,толщина[,lineType[,сдвиг]]])
1). img- Представляет данное изображение.
2). центр- центр круга
3). радиус- Радиус круга
4).color- цвет круга
5).толщина- Обозначает толщину контура круга, если она положительна.
6). lineType — определяет тип границы круга.
7).shift- Представляет количество дробных битов в координате центра и значение радиуса.
Код для круга: -
import numpy as np
import numpy as np
import cv2
# for reading Image
img = cv2.imread(r"/Users/neelpatel/Desktop/sem4/panda.png",1)
# circle function to draw circle
cv2.circle(img,(80,80), 80, (0,255,0), -1)
# to show image
cv2.imshow('image',img)
cv2.waitKey(0)
# to destroy all windows
cv2.destroyAllWindows()
Выход :-

Эллипс :-
Синтаксис эллипса: -
cv2.ellipse (img, центр, оси, угол, startAngle, endAngle, цвет [, толщина [, lineType [, сдвиг]]])
1).img — представляет изображение.
2).box — функция используется для рисования эллипса в изогнутом прямоугольнике.
3).color — обозначает цвет эллипса.
4).angle- Обозначает угол поворота.
5).startAngle — обозначает начальный угол эллиптической дуги в градусах.
6).endAngle — Обозначает конечный угол эллиптической дуги в градусах.
7).thickness — Используется для рисования толщины контура дуги эллипса, если значение положительное. В противном случае это указывает, что должен быть нарисован заполненный эллипс.
8).lineType — Обозначает тип границы эллипса.
9).shift — представляет собой количество дробных битов в координатах центра и значений осей.
Код для эллипса: -
import numpy as np
import cv2
# for reading Image
img = cv2.imread(r"/Users/neelpatel/Desktop/sem4/panda.png",1)
# ellipse function to draw ecllips
cv2.ellipse(img, (250, 150), (80, 20), 5, 0, 360, (0, 0, 255), -1)
# to show image
cv2.imshow('image',img)
cv2.waitKey(0)
# to destroy all windows
cv2.destroyAllWindows()

Обнаружение осторожных краев:-
Приложение
На изображении точки, в которых яркость изображения резко меняется или имеет разрывы, называются краями.
Обнаружение границ — очень полезная концепция, имеющая множество применений, таких как классификация объектов на изображении и локализация. Модели глубокого обучения, в которых требуется обнаружение объектов, используют граничные функции для извлечения информации об объектах, присутствующих на изображении. Его также можно использовать для сегментации изображения и повышения резкости изображения.
Теория
Это многоэтапный алгоритм, состоящий из следующих этапов:
1. Шумоподавление. Обнаружение краев чувствительно к шуму на изображении. Итак, во-первых, мы удаляем шум с помощью фильтра Гаусса 5x5.
2. Нахождение градиента интенсивности изображения. Затем изображение фильтруется как в горизонтальном, так и в вертикальном направлении. Из этих двух изображений мы можем найти градиент края и направление для каждого пикселя.
3. Немаксимальное подавление. Затем изображение сканируется для удаления нежелательных пикселей, которые могут не иметь границ. Для этого проверяется каждый пиксель, является ли он локальным максимумом в своей окрестности в направлении градиента.
4. Пороговое значение гистерезиса. Теперь мы решаем, какие ребра на самом деле являются ребрами, а какие нет. Мы берем два пороговых значения, minVal и maxVal. Края с градиентом интенсивности больше, чем maxVal, точно являются краями. Точно так же те, у которых градиент интенсивности ниже minVal, точно не являются краями.
Код
Syntax-edges = cv2.Canny('/path/to/img', minVal, maxVal, апертураSize, L2gradient)
Параметры-
· /path/to/img: местоположение изображения (обязательно)
· minVal: Минимальный градиент интенсивности (обязательно)
· maxVal: Максимальный градиент интенсивности (обязательно)
· размер апертуры: (необязательно)
- L2gradient: Значение по умолчанию — false. Если true Canny (), обеспечивает большую точность за счет ресурсов.
Код :-
import cv2
image = cv2.imread(r"/Users/neelpatel/Desktop/python_article/flower.png",1)
edges = cv2.Canny(image, 100, 200)
cv2.imshow("Edge Detected Image", edges)
cv2.imshow("Original Image", image)
cv2.waitKey(0) # waits until a key is pressed
cv2.destroyAllWindows() # destroys the window showing image
Входное изображение: -

Выходное изображение: -

Размытие OpenCV
Приложение
Техника размытия часто используется при обработке изображений для удаления высокочастотного содержимого, такого как шум, края изображения. Есть и другие преимущества, такие как удаление слабых краев, сглаживание изображения, а иногда и скрытие деталей.
Теория
Как и одномерные сигналы, изображения можно фильтровать с помощью фильтров нижних частот (ФНЧ) или фильтров высоких частот (ФВЧ). LPF используется для удаления шума, размытия изображений и т. д. HPF используется для поиска краев на изображениях.
Размытие изображения выполняется путем свертки изображения с ядром LPF. Как уже говорилось, он используется для удаления шума. Для этого в этой операции края немного размыты.
Существуют различные техники размытия
1. Усреднение OpenCV: -
В этом изображении свернуто с рамочным фильтром. Вычисляется среднее значение всех пикселей под площадью пикселя и заменяется центральным элементом.
Синтаксис: cv2.blur(src, dst, ksize, привязка, borderType)
Параметры-
· src — исходное изображение
· dst — целевое изображение
· ksize — размер ядра
· якорь — обозначает точки привязки
· borderType — тип границы для вывода
Код :-
import cv2
im = cv2.imread(r"/Users/neelpatel/Desktop/python_article/tiger.png",1)
cv2.imshow('Original Image',im)
cv2.imshow('Blurred Image', cv2.blur(im, (3,3)))
cv2.waitKey(0)
cv2.destroyAllWindows()
Входное изображение: -

Выходное изображение: -

2. Медианное размытие OpenCV:-
Чрезвычайно полезно для шума соли и бумаги в изображении. Вычисляется медиана всех пикселей под площадью пикселя и заменяется центральным элементом.
Синтаксис: cv2.medianBlur(src, dst, ksize)
Параметры-
· src — исходное изображение
· dst — целевое изображение
· ksize — размер ядра
Код :-
import numpy
import cv2
# read image
img = cv2.imread(r"/Users/neelpatel/Desktop/python_article/tiger.png",1)
# apply gaussian blur on src image
dst = median = cv2.medianBlur(img,5)
# display input and output image
cv2.imshow("Median Blurred image", numpy.hstack((img, dst)))
cv2.waitKey(0) # waits until a key is pressed
cv2.destroyAllWindows() # destroys the window showing image

3. Размытие по Гауссу OpenCV: -
Очень эффективно удаляет гауссовский шум с изображения. В этом методе вместо блочного фильтра используется ядро Гаусса. Стандартное отклонение в направлениях X и Y также необходимо указать вместе с высотой и шириной ядра.
Синтаксис: cv2.GaussianBlur(src, ksize, sigmaX[, dst[, sigmaY[, borderType]]])
Параметры-
· src — исходное изображение
· dst — целевое изображение
· ksize — размер ядра
· sigmaX — стандартное отклонение ядра по оси X
· sigmaY — стандартное отклонение ядра по оси Y. Если значение sigmaY равно 0, в качестве sigmaY берется значение sigmaX.
· borderType — Заданные границы изображения, когда ядро применяется к границам изображения.
Код :-
import numpy
import cv2
# read image
img = cv2.imread(r"/Users/neelpatel/Desktop/python_article/bird.png",1)
# apply gaussian blur on src image
dst = cv2.GaussianBlur(img, (5, 5), cv2.BORDER_DEFAULT)
# display input and output image
cv2.imshow("Gaussian smoothing", numpy.hstack((img, dst)))
cv2.waitKey(0) # waits until a key is pressed
cv2.destroyAllWindows() # destroys the window showing image

Захват видео OpenCV
Код :-
import cv2
import numpy as np
cap = cv2.VideoCapture(0)
while (True):
# Capture image frame-by-frame
ret, frame = cap.read()
# Our operations on the frame come here
gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
# Display the resulting frame
cv2.imshow('frame', gray)
if cv2.waitKey(1) & 0xFF == ord('q'):
break
# When everything done, release the capture
cap.release()
cv2.destroyAllWindows()
Выход:-

Отображаемый текст OpenCV
Код :-
import numpy as np
import cv2
import os.path
import time
def display_text(textString):
# Create a black image
img = np.zeros((100,512,3), np.uint8)
# Write some Text
font = cv2.FONT_HERSHEY_SIMPLEX
cv2.putText(img, textString,(10,50), font, 1,(255,255,255),2)
#Display the image
cv2.namedWindow('text', cv2.WINDOW_NORMAL)
cv2.imshow("text",img)
cv2.waitKey(2000)
cv2.destroyAllWindows()
if __name__ == "__main__":
while True:
if os.path.exists("result_lip/concate-output.jpg") and os.path.exists("result_lip/text.txt"):
with open("result_lip/text.txt") as f:
content = f.readlines()
print(content[0])
display_text(content[0])
if (content[0] == "Good bye"):
break
else:
display_text("Processing")
time.sleep(1)
Выход:-

ЗАКЛЮЧЕНИЕ
OpenCV — это огромная библиотека с открытым исходным кодом. В OpenCV CV — это аббревиатура от Computer Vision, которая помогает компьютерам понимать содержание цифровых изображений, таких как фотографии и видео.
OpenCV в основном ориентирован на приложения компьютерного зрения, такие как обработка изображений, искусственный интеллект, захват видео и анализ обнаружения объектов.