Авторы: - Нил Патель, Сахил Патель
Введение в одну из огромных библиотек с открытым исходным кодом для компьютерного зрения, машинного обучения и обработки изображений.
При интеграции с различными библиотеками, такими как 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 “)
Выход :-
Итак, с помощью OpenCV чтение и сохранение файла стало достаточно простым.
Поворот изображения:-
Вращение изображения — это одна из основных функций, предоставляемых 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 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 ellipse 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'C:\Users\CS3306TX\Downloads\download (8).jpg') 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'C:\Users\CS3306TX\Downloads\kingfisher-2046453__340.webp') 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 cv2 import numpy # read image img = cv2.imread(r'C:\Users\CS3306TX\Downloads\kingfisher-2046453__340.webp', 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 cv2 import numpy # read image src = cv2.imread(r'C:\Users\CS3306TX\Downloads\kingfisher-2046453__340.webp', 1) # apply gaussian blur on src image dst = cv2.GaussianBlur(src, (5, 5), cv2.BORDER_DEFAULT) # display input and output image cv2.imshow("Gaussian Smoothing", numpy.hstack((src, 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)
Выход :-
Совместное использование Open CV и Dlib для создания окна распознавания лиц
мы будем использовать обе библиотеки,
- таким образом, мы будем снимать наше видео и отображать его с помощью Open CV.
- распознавать ориентиры на лице с помощью Dlib и shape_predictor_68_face_landmarks.dat, что важно при работе над проектом по обнаружению лиц или проектом, связанным с обнаружением движения или объектов.
Код :-
#Import required modules import cv2 import dlib import faceAlignment as fa import numpy as np import sys import select #Set up some required objects video_capture = cv2.VideoCapture(0) #Webcam object detector = dlib.get_frontal_face_detector() #Face detector predictor = dlib.shape_predictor("shape_predictor_68_face_landmarks.dat") #Landmark identifier. Set the filename to whatever you named the downloaded file while True: ret, frame = video_capture.read() frame = cv2.resize(frame, (512, 256))#resize gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY) clahe = cv2.createCLAHE(clipLimit=2.0, tileGridSize=(8,8)) clahe_image = clahe.apply(gray) detections = detector(clahe_image, 1) #Detect the faces in the image for k,d in enumerate(detections): #For each detected face shape = predictor(clahe_image, d) #Get coordinates for i in range(1,68): #There are 68 landmark points on each face cv2.circle(frame, (shape.part(i).x, shape.part(i).y), 1, (0,0,255), thickness=2) #For each point, draw a red circle with thickness2 on the original frame cv2.imshow("origin", frame) key= 0xFF & cv2.waitKey(1) if key & 0xFF == 27: #Exit program when the user presses 'esc' break # When everything done, release the capture video_capture.release() cv2.destroyAllWindows()
Все рассмотренные выше примеры функций Open-CV доступны на Github для изучения и изучения.
Спасибо, что прочитали. Пожалуйста, поделитесь с нами своим мнением. Я всегда открыт для общения, поэтому не стесняйтесь оставлять комментарии ниже и делиться своими мыслями.