Авторы: - Нил Патель, Сахил Патель

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

При интеграции с различными библиотеками, такими как 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 для изучения и изучения.



Спасибо, что прочитали. Пожалуйста, поделитесь с нами своим мнением. Я всегда открыт для общения, поэтому не стесняйтесь оставлять комментарии ниже и делиться своими мыслями.