如何使用Python的OpenCV库处理图像和视频,


目录
  • 介绍
  • 计算机视觉
  • OpenCV
    • 应用:
    • 安装
  • 使用 OpenCV 处理图像
    • 1. 从文件中读取图像
    • 2. 调整图像大小:
    • 3. 旋转图像
    • 4. 翻转图像:
    • 5. 重写图像
    • 6. 裁剪图像
    • 7. 绘制形状
  • 使用 OpenCV 处理视频
    • 1. 捕获视频帧的属性:
    • 2. 读取视频文件
    • 3. 编写视频文件
  • 结论
    • 总结

      介绍

      众所周知,计算机视觉在机器学习和人工智能领域获得了巨大的普及。图像识别技术允许计算机处理比人眼更多的信息,通常更快、更准确,或者只是在人们不参与观看的情况下处理。因此,你可能想知道机器如何学习和解释视觉世界。

      在本文中,我将介绍如何使用 Python 的 OpenCV 库开始处理图像和视频。我们将涵盖以下主题:

      • 计算机视觉简介
      • OpenCV 库及其应用简介
      • 如何使用 OpenCV 库处理图像和视频

      计算机视觉

      它是人工智能和计算机科学的一个领域,训练计算机理解视觉世界。它是机器学习的主要组成部分之一。它处理自然世界的图像(高维数据)。它执行各种任务,例如获取、分析和处理以理解图像并将其转换为数字或符号信息。

      当今的计算机视觉算法基于模式识别,通常依赖于卷积神经网络 (CNN)。由于该领域的各种进步,计算机视觉正在蓬勃发展,并且它的受欢迎程度在过去几年中呈指数增长。

      计算机视觉的应用范围从缺陷检测到入侵者检测、口罩检测到肿瘤检测、作物监测到植物监测、车辆分类到交通流量分析等。该技术主要应用于零售和制造、交通、媒体、农业、医疗保健、体育、银行、增强现实、家庭安全等。

      OpenCV

      Python 包含一个名为 OpenCV 的库,用于在计算机视觉领域工作。它是一个开源库,于 1999 年推出。我们可以执行图像处理、图像分析、视频分析等任务。该库主要用 C++ 编写,具有 C++、Python、Java 和 MATLAB 等接口。

      应用:

      • 2D 和 3D 特征工具包
      • 视频/图像搜索检索
      • 人脸识别系统
      • 手势识别
      • 移动机器人
      • 对象识别
      • 医学影像分析
      • 运动追踪
      • 增强现实

      安装

      使用 pip 命令可以轻松安装 OpenCV,如下所示

      pip install opencv-python

      使用 OpenCV 处理图像

      在处理图像时,OpenCV 有许多可以对图像执行的操作。其中,我将讨论:

      1. 读取图像
      2. 调整图像大小
      3. 旋转图像
      4. 翻转图像
      5. 重写图像
      6. 裁剪图像
      7. 在图像上绘制各种形状

      1. 从文件中读取图像

      1. 使用函数imread()读取图片 (支持BMP、jpeg、tiff、png、便携图片格式等)
      2. 为了显示我们在上一步中读取的图像,我们使用函数“imshow()”。这个函数的第一个参数是标题,第二个是我们读到的图像。
      3. waitkey() 函数显示一个窗口几毫秒。毫秒数作为参数传递给函数。如果 0 作为参数传递,它将永远等待,直到按下任何键。
      4. 最后,destroyAllWindows() 将图像窗口显示后从内存中删除。

      例子:

      python 代码:

      import cv2
       
      img=cv2.imread('img.jpeg')
      cv2.imshow('Image',img)
      cv2.waitKey()
      cv2.destroyAllWindows()

      输出

      8fcf702413cc22140704667f34159ac5.png

      2. 调整图像大小:

      在图像处理中,经常需要调整图像的大小。OpenCV 为我们提供了几种轻松重新缩放图像的方法。让我们通过一个例子来理解。

      例子:

      img2=cv2.resize(img,(400,400))
      #resize by a fraction of original size
      img3=cv2.resize(img,(0,0),fx=0.5,fy=0.6)
      #using INTER_AREA to shrink the image
      img4=cv2.resize(img,(600,700),interpolation=cv2.INTER_AREA)

      3. 旋转图像

      使用 OpenCV 旋转图像的语法是

      M=cv2.getRotationMatrix2D(center, angle,scale)

      然后我们使用方法

      cv2.wrapAffine(src,M, (h,w))

      让我们通过一个例子来深入了解:

      例子:

      #calculate height and width to get center
      (h,w)=img.shape[:2]
      center=(w/2,h/2)
       
      #rotate by 90 degrees
      M = cv2.getRotationMatrix2D(center, 90, 1.0)
      img90 = cv2.warpAffine(img, M, (h, w))
       
      #rotate by 180 degrees
      M = cv2.getRotationMatrix2D(center, 180, 1.0)
      img180 = cv2.warpAffine(img, M, (h, w))
       
      #rotate by 270 degrees
      M = cv2.getRotationMatrix2D(center, 270, 1.0)
      img270 = cv2.warpAffine(img, M, (h, w))

      34c7e0af8647c752d14a76f26d2e0446.jpeg

      4. 翻转图像:

      要翻转图像,我们使用函数 cv2.flip() 并传递参数,即图像和翻转代码(水平或垂直)

      例子:

      #flip- vertical axes
      img=cv2.flip(img,0) 
      #flip- horizontal axes
      img=cv2.flip(img,1)

      9e581f15a328c079c06a495c68fd5ab7.jpeg

      5. 重写图像

      要将图像重写为新文件,我们使用函数 imwrite() 如下:

      cv2.imwrite('new_img.jpg',img)

      6. 裁剪图像

      #crop from top
      img=img[0:100,0:100]
      #crop by specifying height and width
      img=img[50:200,50:100]

      7d058824699703414b838ee6563a971c.jpeg

      7. 绘制形状

      使用 OpenCV,我们可以使用不同的函数在图像上快速绘制各种形状,如圆形、矩形、多边形等。让我们用一个例子来理解:

      例子:

      #creating a blank image
      import cv2 as cv2
      import numpy as np
      img=np.zeros((500,500,3),dtype=float)
      #changing the color of the image to green
      img[:]=0,255,0
      #Red
      img[:]=0,0,255
      #changing the color of a particular portion
      img[200:300,300:450]=0,255,0
      #drawing a rectangle
      cv2.rectangle(img,(100,100),(180,180),color=(255,0,0),thickness=5)
      #draw a circle with filling the color
      cv2.circle(img,center=(100,300),radius=60,color=(0,255,0),thickness=-1)
      #drawing a line 
      cv2.line(img,(0,0),(317,356),thickness=3,color=(0,255,0))
      #adding text
      cv2.putText(img,org=(50,50),fontScale=3,color=(255,0,0)
      ,thickness=2,lineType=cv2.LINE_AA,text="IMAGES", fontFace=cv2.FONT_HERSHEY_COMPLEX_SMALL)
      cv2_imshow(img)
      cv2.waitKey(0)

      e97758f81813a3bdff9bea40ad456e7f.png

      使用 OpenCV 处理视频

      视频是帧序列或图像序列。图像通常采用 BGR(蓝、绿、红)的形式。每个像素的值都在 0-255 之间。要开始使用 OpenCV 处理视频,我们使用以下函数:

      Cv2.VideoCapture():它建立与视频的连接。它带有一个参数,该参数指示是使用内置摄像头还是附加摄像头。值“0”表示内置摄像头。

      Cap.read():这个方法可以让我们得到一个帧。

      Cv2.cvtColor():允许你更改图像使用的颜色模型。这包括从 BGR 转换为 RGB 和灰度。

      在处理视频方面,在本文中,我们将学习

      1. 如何捕获视频帧的不同属性
      2. 读取视频文件
      3. 写视频

      1. 捕获视频帧的属性:

      让我们看几个捕获视频属性的示例。

      要捕获帧形状:

      frame.shape
      (2160, 3840, 3)
      plt.imshow(frame)
      plt.show()

      要更改框架的颜色,我们使用函数 cv2.cvtColor(),如下所示:

      #changing the color of the frame
      plt.show()
      plt.imshow(cv2.cvtColor(frame,cv2.COLOR_BGR2GRAY))

      de074b28336c1c21270ccbdba5bb1f94.png

      为了捕捉视频,我们使用函数 cv2.VideoCapture()

      cap=cv2.VideoCapture('/content/video.mp4')
      cap.read()

      要获取框架的高度,我们使用 cap.get() 函数如下:

      #height
      cap.get(cv2.CAP_PROP_FRAME_HEIGHT)

      为了获得框架的宽度,我们使用:

      #width
      cap.get(cv2.CAP_PROP_FRAME_WIDTH)

      要获取帧数,我们使用函数 cap.get() 如下:

      #number of frames
      cap.get(cv2.CAP_PROP_FRAME_COUNT)

      为了获得每秒的帧数,我们使用

      #number of frames per sec
      cap.get(cv2.CAP_PROP_FPS)

      2. 读取视频文件

      1. 导入 cv2
      2. 然后我们使用函数 cv2.VideoCapture() 来捕捉视频。
      3. 接下来,我们循环遍历每一帧并使用函数 cap.read() 读取帧。
      4. 为了显示每一帧,我们使用方法 cv2.imshow()。
      5. 最后,我们使用 waitKey() 函数中断循环,当用户按下任意键时,该函数会中断循环。
      6. destroyAllWindows() 函数将关闭窗口。

      例子:

      #importing dependencies
      import cv2
      from matplotlib import pyplot as plt
      #establish capture
      cap=cv2.VideoCapture('/content/video.mp4')
      #loop through each frame
      while(cap.isOpened()):
        ret,frame=cap.read()
        frame=cv2.resize(frame,(1200,700))
        cv2.imshow(‘Video',frame)
        if cv2.waitKey(10) & 0xFF == ord('q'):
          break
      #close down everything
      cap.release()
      cv2.destroyALLWindows()

      3. 编写视频文件

      1. 导入 cv2
      2. 使用函数 cv2.VideoCapture() 捕获视频
      3. 然后我们使用函数 cv2.VideoWriter 来编写视频。该函数将参数作为
        1. cv2.VideoWriter(filename, fourcc, fps, framesize)
        2. filename - 捕获的输入视频文件
        3. Fourcc - 用于指定视频编解码器的代码
        4. fps - 每秒帧数
        5. framesize - 视频框的高度和宽度
      4. 接下来,我们循环遍历每一帧并使用对象 video_writer 来写入帧。
      5. 最后,我们使用 waitKey() 函数来打破循环
      6. 使用函数 destroyAllWindows() 关闭窗口
      import cv2
      from google.colab.patches import cv2_imshow
      cap=cv2.VideoCapture('/content/video.mp4')
      height=int(cap.get(cv2.CAP_PROP_FRAME_HEIGHT))
      width=int(cap.get(cv2.CAP_PROP_FRAME_WIDTH))
      fps=int(cap.get(cv2.CAP_PROP_FPS))
      frame_size = (width,height)
      video_writer= cv2.VideoWriter('/content/output.avi',cv2.VideoWriter_fourcc('M','J','P','G'), fps, frame_size)
      for frame_idx in range(int(cap.get(cv2.CAP_PROP_FRAME_COUNT))):
        ret,frame=cap.read()
        gray=cv2.cvtColor(frame,cv2.COLOR_BGR2GRAY)
        video_writer.write(gray)
        if cv2.waitKey(10) & 0xFF== ord('q'):
          break
      cap.release()
      cv2.destroyALLWindows()

      结论

      本文帮助你创建了与计算机视觉相关的出色应用程序。希望你现在对以下内容有一个很好的了解:

      • 什么是计算机视觉
      • OpenCV 库的应用
      • 使用 OpenCV 库处理图像
      • 使用 OpenCV 库处理视频

      总结

      到此这篇关于如何使用Python的OpenCV库处理图像和视频的文章就介绍到这了,更多相关Python OpenCV处理图像和视频内容请搜索3672js教程以前的文章或继续浏览下面的相关文章希望大家以后多多支持3672js教程!

      您可能感兴趣的文章:
      • Python Opencv实现图像轮廓识别功能
      • Python OpenCV处理图像之图像像素点操作
      • 在Python下利用OpenCV来旋转图像的教程
      • python opencv旋转图像(保持图像不被裁减)
      • python opencv实现图像边缘检测
      • python opencv进行图像拼接
      • python+OpenCV实现图像拼接

      评论关闭