一文综述OpenCV基础+计算机视觉基础

点击上方“3D视觉工坊”,选择“星标”

干货第一时间送达

在这篇文章中,将尝试解释Computer Vision和OpenCV库的工作原理。在整篇文章中,将介绍:

  • 什么是计算机视觉?

  • 计算机视觉如何工作?

  • 计算机视觉的应用

  • 什么是OpenCV?

  • OpenCV的简史

  • OpenCV快速入门

让我们逐步开始。

资源:https : //medium.com/analytics-vidhya/introduction-to-computer-vision-with-opencv-part-1-3dc948521deb

什么是计算机视觉?

Computer Vision是一个工作场所,可让我们以数字方式检测图像并对这些图像执行操作。Computer Vision是一个人工智能工作区,在这里我们可以通过访问数字媒体中的图像特征来收集信息并提取特征。在其他来源中,其定义如下:

维基百科:

计算机视觉是一门跨学科的科学领域,涉及计算机如何从数字图像或视频中获得高级了解。从工程学的角度来看,它试图理解和自动化人类视觉系统可以完成的任务。

IBM:

计算机视觉是人工智能(AI)的领域,它使计算机和系统能够从数字图像,视频和其他视觉输入中获取有意义的信息,并根据该信息采取行动或提出建议。如果AI使计算机能够思考,则计算机视觉使他们能够看到,观察和理解。

计算机视觉的主要目的是理解图像并解释它们以供我们使用。作为人类,我们可以用眼睛轻松感知任何街道上的移动物体。计算机使用许多不同的算法来理解这一点。但是,使用这些算法,计算机可能仍无法给出非常高精度的结果。

资源:https : //manningbooks.medium.com/how-does-computer-vision-work-bc35b0fb5df5

计算机视觉如何工作?

计算机使用某些算法来检测数字媒体中的图像。数字媒体中的图像由像素组成。任何图像中的像素都具有颜色和坐标。

想象一下,每个像素都有自己的标识。在其ID上,它写入坐标和颜色信息。这是计算机可以检测和识别图像的方式。

像素的坐标和颜色信息用数字表示。数字是根据RGB格式定义的。由于图像身份中的此信息是用数字表示的,因此计算机可以理解这一点。

每个图像可以包含数千个像素。这些像素也作为矩阵保留在图像上。因此,如果我们要在视觉上进行操作,则需要通过矩阵进行操作。

计算机视觉分为三个基本步骤:

1.获取图像

可以通过视频,照片或3D技术实时获取甚至大集合的图像进行分析。

2.处理图像

深度学习模型会自动执行此过程的大部分过程,但是通常会先向模型提供数千张标记或预先识别的图像,然后对模型进行训练。

3.了解图像

最后一步是解释性步骤,在此步骤中对对象进行识别或分类。

资源:https://www.weareworldquant.com/en/thought-leadership/understanding-images-computer-vision-in-flux/

计算机视觉的应用

最受欢迎的计算机视觉应用程序的示例:

  • 癌症检测

  • COVID-19诊断

  • 口罩检测

  • 车辆分类

  • 交通流量分析

  • 停车占用检测

  • 自动车牌识别

  • 客户追踪

  • 人数盘点

  • 社会距离

  • 球追踪

  • 球门线技术

什么是OpenCV?

OpenCV,即开源计算机视觉库。可以理解,它是一个开放源代码的计算机视觉库。如今,它在图像处理领域非常流行。你可以使用Java,C ++或Python语言在OpenCV上工作。

通过使用OpenCV,人们可以处理图像和视频以识别对象,面部,甚至是人的笔迹。当它与各种库(例如Numpy)集成时,python能够处理OpenCV数组结构以进行分析。

为了识别图像模式及其各种特征,我们使用向量空间并对这些特征执行数学运算。

OpenCV的简史

OpenCV由加里·布拉德斯基(Gary Bradsky)于1999年在英特尔创立,第一版于2000年问世。瓦迪姆·皮萨列夫斯基(Vadim Pisarevsky)与加里·布拉德斯基(Gary Bradsky)一起管理英特尔的俄罗斯软件OpenCV团队。

2005年,OpenCV用于Stanley,该车赢得了2005年DARPA大挑战赛的冠军。后来,在Willow Garage的支持下,它的发展得以继续,Gary Bradsky和Vadim Pisarevsky领导了该项目。OpenCV现在支持与计算机视觉和机器学习有关的多种算法,并且正在日益扩展。

OpenCV支持多种编程语言,例如C ++,Python,Java等,并且可在包括Windows,Linux,OS X,Android和iOS在内的不同平台上使用。基于CUDA和OpenCL的高速GPU操作的接口也正在积极开发中。

OpenCV-Python是用于OpenCV的Python API,结合了OpenCV C ++ API的最佳质量和Python语言。

OpenCV快速入门

在讨论了计算机视觉和OpenCV之后,我想向你展示我们可以使用一些简单的应用程序来做些什么。这样,你既可以练习得更好,又可以进入学习过程。

读取图像

首先,我们将使用OpenCV进行读取图像并将其显示在屏幕上的过程。如果在使用Python的IDE中未安装OpenCV,则必须先安装它。

pip install opencv-python

安装之后,首先,你必须导入库。你可以将OpenCV库称为cv2。

你需要将要读取的图像保存到对象中。

你可以使用cv2.imread( )函数读取图像。此函数将获取图像的文件的路径作为参数。由于我的python工作文件与图片位于同一文件夹中,因此我直接输入图片的名称。这里要注意的一点是编写视觉效果的扩展。别忘了这个。

当我们运行代码时,我们给该窗口命名,因为它将在可视窗口中打开。我们使用cv2.namedWindow( ).函数执行此操作。该函数将窗口的名称作为其第一个参数。实际上,这就足够了。但是由于我希望能够更改打开的窗口的大小,因此我添加了参数cv2.WINDOW_NORMAL.

代码运行时,函数cv2.imshow( )用于在屏幕上显示当前图像。它有两个参数。第一个是我们将要显示的视觉效果的名称,第二个是它在其中注册的对象。在这里,我将图像保存为img。因此,我将img用作第二个参数。

最后,我编写该函数cv2.waitKey(0)是因为希望在打开的可视屏幕上随时关闭它。此函数以毫秒为单位获取数字值。当我们在此处写入0时,表示我们可以随时关闭窗口。

另外,养成添加函数cv2.destroyAllWindows().的习惯。当我们执行高级项目时,我们会忘记关闭许多在屏幕上打开的窗口。此函数可避免这种情况。

你可以在下面找到所有代码。

import cv2                                                        

img = cv2.imread("klon.jpg")

cv2.namedWindow("Image",cv2.WINDOW_NORMAL)

cv2.imshow("Image", img)

cv2.waitKey(0)
cv2.destroyAllWindows()

从网络摄像头读取视频

现在,让我们检查一下如何从计算机摄像机读取视频。

首先,我们导入OpenCV库。

然后,我们将从计算机摄像机拍摄的图像写在一个物体上。我将此对象设置为捕获。我们使用cv2.VideoCapture(0)函数从计算机摄像头捕获视频。此处的值0用于访问连接到计算机的相机。

如果你有摄像机,则可以将其设为0。如果你有更多摄像机,则可以尝试1,2 ..访问相应的摄像机。

如你所知,视频由帧组成。为了查看我们在视频中捕获的图像,我们必须将它们循环打印在屏幕上。因此,我们进行了定义,将读取捕获的图像,然后将该图像返回给我们。

ret, frame = capture.read()

然后我们进行调整。要在镜中看到自己看到的捕获图像,我们需要将它们反转为y轴。这就是为什么我们在frame = cv2.flip(frame, 1).此处编写代码的原因,当我们在帧后输入参数为1时,它给出了y轴图像的倒数。

然后,我们编写代码cv2.imshow("Webcam", frame)以显示从相机拍摄的帧。

然后,我们确定捕获的图像将在屏幕上保留几毫秒。除此之外,当我们按下键盘上的q键时,我们将编写以下代码以停止接收图像。

cv2.imshow("Webcam", frame)
if cv2.waitKey(30) & 0xFF == ord("q"):
    break

在此,0xFF == ord("q")是指按键盘上的q键。

最后,在处理完视频之后,完成后,我们需要编写一些代码来发布图像。如下。

capture.release()

你可以在下面找到所有代码。

import cv2
  
capture = cv2.VideoCapture(0)                                         

while True:
     ret, frame = capture.read()
     frame = cv2.flip(frame, 1)

     cv2.imshow("Webcam", frame)
     if cv2.waitKey(30) & 0xFF == ord("q"):
         break

capture.release()
cv2.destroyAllWindows()

长宽比应用

现在,我将向你展示一个长宽比应用程序。在某些情况下,我们可能不知道图像的尺寸。在这种情况下,可以通过避免手动计算来使用此类应用程序来实现此目的的自动化。

我们定义了一个名为resizewithAspectRatio的函数。我们为此函数设置了4个参数。这些是:

  • 为其保留图像的变量的名称

  • 宽度

  • 高度

  • 并具有避免在调整大小时插值的功能

让我们继续执行要应用的步骤。

首先,我们定义一个维变量,其预定义为空。然后,将原始尺寸中图像的前两个尺寸分别作为高度和宽度的h和w保存到一个元组中。

如果未指定宽度和高度,则我们希望图像返回其原始状态。

如果未指定宽度,我们希望执行以下操作。

r = height / float(h)
dimension = (int(w*r),height)

让我告诉你这是什么意思。我们计算原始图像中给定的高度与尺寸的比率。然后,我们将该比例乘以原始宽度,然后得出新尺寸。因此,在视觉上没有尺寸的变形。

否则,如果没有给出高度,我们将再次应用类似的程序。

结果,我们希望根据使用以下代码编写的函数输出调整大小后的视觉效果。

return cv2.resize(img, dimension, interpolation= inter)

然后,根据编写的函数读取原始图像和调整大小后的图像。

img = cv2.imread("klon.jpg")
img1 = resizewithAspectRatio(img, 
                             width = None,
                             height = 600, 
                             inter = cv2.INTER_AREA)

最后,我们通过编写一些我们知道的代码来完成应用程序。

cv2.imshow("Original",img)
cv2.imshow("Resized",img1)

cv2.waitKey(0)
cv2.destroyAllWindows()

你可以在下面找到所有代码。

import cv2


def resizewithAspectRatio(  img
                          , width = None
                          , height = None
                          , inter = cv2.INTER_AREA):              
    dimension: None
    (h,w) =  img.shape[:2]

    if width is None and height is None:
        return img

    if width is None:
        r = height / float(h)
        dimension = (int(w*r),height)

    else:
        r = width / float(w)
        dimension = (width, int(h*r))


    return cv2.resize(img, dimension, interpolation= inter)

img = cv2.imread("klon.jpg")
img1 = resizewithAspectRatio(  img 
                             , width = None
                             , height = 600
                             , inter = cv2.INTER_AREA)

cv2.imshow("Original",img)
cv2.imshow("Resized",img1)

cv2.waitKey(0)
cv2.destroyAllWindows()

本文仅做学术分享,如有侵权,请联系删文。

下载1

在「3D视觉工坊」公众号后台回复:3D视觉即可下载 3D视觉相关资料干货,涉及相机标定、三维重建、立体视觉、SLAM、深度学习、点云后处理、多视图几何等方向。

下载2

在「3D视觉工坊」公众号后台回复:3D视觉github资源汇总即可下载包括结构光、标定源码、缺陷检测源码、深度估计与深度补全源码、点云处理相关源码、立体匹配源码、单目、双目3D检测、基于点云的3D检测、6D姿态估计源码汇总等。

下载3

在「3D视觉工坊」公众号后台回复:相机标定即可下载独家相机标定学习课件与视频网址;后台回复:立体匹配即可下载独家立体匹配学习课件与视频网址。

重磅!3DCVer-学术论文写作投稿 交流群已成立

扫码添加小助手微信,可申请加入3D视觉工坊-学术论文写作与投稿 微信交流群,旨在交流顶会、顶刊、SCI、EI等写作与投稿事宜。

同时也可申请加入我们的细分方向交流群,目前主要有3D视觉CV&深度学习SLAM三维重建点云后处理自动驾驶、多传感器融合、CV入门、三维测量、VR/AR、3D人脸识别、医疗影像、缺陷检测、行人重识别、目标跟踪、视觉产品落地、视觉竞赛、车牌识别、硬件选型、学术交流、求职交流、ORB-SLAM系列源码交流、深度估计等微信群。

一定要备注:研究方向+学校/公司+昵称,例如:”3D视觉 + 上海交大 + 静静“。请按照格式备注,可快速被通过且邀请进群。原创投稿也请联系。

▲长按加微信群或投稿

▲长按关注公众号

3D视觉从入门到精通知识星球:针对3D视觉领域的视频课程(三维重建系列三维点云系列结构光系列手眼标定相机标定orb-slam3等视频课程)、知识点汇总、入门进阶学习路线、最新paper分享、疑问解答五个方面进行深耕,更有各类大厂的算法工程人员进行技术指导。与此同时,星球将联合知名企业发布3D视觉相关算法开发岗位以及项目对接信息,打造成集技术与就业为一体的铁杆粉丝聚集区,近2000星球成员为创造更好的AI世界共同进步,知识星球入口:

学习3D视觉核心技术,扫描查看介绍,3天内无条件退款

 圈里有高质量教程资料、可答疑解惑、助你高效解决问题

觉得有用,麻烦给个赞和在看~  

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
OpenCVOpen Source Computer Vision Library)是一个开源的计算机视觉库,它提供了丰富的图像处理和计算机视觉算法。下面是一个简要的OpenCV计算机视觉基础教程: 1. 安装OpenCV:首先,你需要下载并安装OpenCV库。你可以从OpenCV官方网站上找到适合你操作系统的安装包,并按照官方文档中的指导进行安装。 2. 图像读取和显示:使用OpenCV可以轻松地读取和显示图像。你可以使用`cv2.imread()`函数读取图像文件,并使用`cv2.imshow()`函数显示图像。 3. 图像处理:OpenCV提供了许多图像处理函数,例如调整图像大小、改变图像亮度和对比度、图像平滑、边缘检测等。你可以根据需要选择适当的函数来处理图像。 4. 特征提取:在计算机视觉中,特征提取是一个重要的步骤。OpenCV提供了各种特征提取算法,如Harris角点检测、SIFT、SURF、ORB等。这些算法可以帮助你在图像中找到感兴趣的特征点。 5. 目标检测:OpenCV还提供了一些目标检测算法,如Haar级联检测器、HOG+SVM等。这些算法可以用于在图像或视频中检测出特定的目标物体。 6. 图像分割:图像分割是将图像划分为不同的区域或对象的过程。OpenCV提供了一些图像分割算法,如基于阈值的分割、基于边缘的分割、基于区域的分割等。 7. 机器学习与深度学习:OpenCV还集成了一些机器学习和深度学习的功能,如支持向量机(SVM)、神经网络等。你可以使用这些功能来进行图像分类、目标识别等任务。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值