服务粉丝

我们一直在努力
当前位置:首页 > 财经 >

​计算机视觉方向必备opencv基础知识总览

日期: 来源:新机器视觉收集编辑:臧小满

点击下方卡片,关注“新机器视觉”公众号

重磅干货,第一时间送达

曾经看过一个视频,树莓派自平衡机器人自动追着小球跑。不经让我脑子蹦出一个有趣的想法,可以做一个识别猫的机器人,让机器人跟着猫跑,有这样一个小东西陪伴喵星人一定很有意思。

不过,首先你要有一只猫,其次,这个机器人不仅要有一双会视觉处理的眼睛,还一定要有一个坚强的外壳,不然会被喵星人给拆了。


那机器人是如何完成处理图像和视频的各项任务呢?开源的计算机视觉包——OpenCV 会是你的最佳选择,今天给小白们做一个最简单的入门介绍。



今天很开心与大家分享一篇关于OpenCV的文章,重点阐述以下几个问题: 


1.如何部署OpenCV。

 

2.OpenCV有哪些模块,可以做什么。

 

3.OpenCV的基本数据结构的熟悉与使用。

 

希望看过文章后,你也可以开始玩转OpenCV之路。


01 什么OpenCV


它是一款由Intel公司俄罗斯团队发起并参与和维护的一个计算机视觉处理开源软件库。


作为一款优秀的计算机视觉库,在诸多方面都有着卓越的表现:

1.编程语言

多数模块基于C++实现,少部分基于C语言实现,同时提供了Python、Ruby、MATLAB等语言的接口。


2.跨平台   

可自由地运行在Linux、Windows和Mac OS等桌面平台,Android、 IOS、BlackBerray等移动平台。


3.活跃的开发团队

目前已更新至OpenCV4.0


4.丰富的API

完善的传统计算机视觉算法,涵盖主流传统机器学习算法,同时添加了对深度学习的支持。


OpenCV可以完成几乎所有的图像处理任务,下面是一个简要list。

  • 视频分析(Video analysis)

  • 3D重建(3D reconstruction)

  • 特征提取(Feature extraction)

  • 目标检测(Object detection)

  • 机器学习(Machine learning)

  • 计算摄影(Computational photography)

  • 形状分析(Shape analysis)

  • 光流算法(Optical flow algorithms)

  • 人脸和目标识别(Face and object recognition)

  • 表面匹配(Surface matching)

  • 文本检测和识别(Text detection and recognition)


02 如何部署OpenCV?


一般来说我们会使用OpenCV的C++和Python版本,所以下面分别对其安装进行介绍,以ubuntu系统为例。


2.1 Ubuntu安装C++ OpenCV


安裝OpenCV所需的库

sudo apt-get install build-essential


sudo apt-get install cmake git libgtk2.0-dev pkg-config libavcodec-dev libavformat-dev 


libswscale-dev3 sudo apt-get install python-dev python-numpy libtbb2 libtbb-dev libjpeg-dev libpng-dev libtiff-dev libjasper-dev libdc1394-22-dev 

下载最新opencv源码

unzip opencv-3.2.0.zip

cd ~/opencv-3.2.0 

编译OpenCV

cd ~/opencv-3.2.0


mkdir release


cd release


cmake -D CMAKE_BUILD_TYPE=RELEASE -D 

CMAKE_INSTALL_PREFIX=/usr/local ..


make


sudo make install

一般来说,编译安装绝对不可能一次顺利完成,以下是几个常见的问题。

1,编译过程中ippcv下载失败, 解决问题的办法就是手动下载。

2,LAPACK包include报错, 解决问题的办法就是在cmake之后马上修改对应include文件的路径  如果make失败后再修改则无效。

3,某些模块找不到, 通常是因为少了编译安装contrib模块。

2.2  Ubuntu安装Python-OpenCV


安装opencv

pip3 install opencv-python

进入python,导入cv2

import cv2


03 OpenCV模块简介


OpenCV提供了许多内置的用于图像处理和计算机视觉相关操作的基础数据结构,它们都包含在core模块中,并且这些数据结构都已经针对速度和内存做了优化,下面以4.0版本为例进行介绍,参考https://docs.opencv.org/master/d9/df8/tutorial_root.html


Opencv目录下”modules目录”列出了OpenCV包含的各个模块,其中core、highgui、imgproc是最基础的模块。



  • core模块实现了最核心的数据结构及其基本运算,如绘图函数、数组操作相关函数,与OpenGL的互操作等。


  • highgui模块实现了视频与图像的读取、显示、存储等接口。

  • imgproc模块实现了图像处理的基础方法,包括图像滤波、图像的几何变换、平滑、阈值分割、形态学处理、边缘检测、目标检测、运动分析和对象跟踪等。






对于图像处理其他更高层次的方向及应用,OpenCV也有相关的模块实现


  • features2d模块用于提取图像特征以及特征匹配,nonfree模块实现了一些专利算法,如sift特征。

  • objdetect模块实现了一些目标检测的功能,经典的基于Haar、LBP特征的人脸检测,基于HOG的行人、汽车等目标检测,分类器使用Cascade Classification(级联分类)和Latent SVM等。

  • stitching模块实现了图像拼接功能。

  • FLANN模块(Fast Library for Approximate Nearest Neighbors),包含快速近似最近邻搜索FLANN 
    和聚类Clustering算法。

  • ml模块机器学习模块(SVM,决策树,Boosting等等)。

  • photo模块包含图像修复和图像去噪两部分。

  • video模块针对视频处理,如背景分离,前景检测、对象跟踪等。

  • calib3d模块即Calibration(校准)3D,这个模块主要是相机校准和三维重建相关的内容。包含了基本的多视角几何算法,单个立体摄像头标定,物体姿态估计,立体相似性算法,3D信息的重建等等。

  • G-API模块包含超高效的图像处理pipeline引擎。




另外,原来在opencv2中的shape, superres, videostab, viz等模块被移动到opencv_contrib中,关于opencv contrib,我们以后再详细介绍。


04 OpenCV基本数据结构


OpenCv提供了多种基本的数据类型,常用的OpenCV的基本数据结构有以下几种:

  • Mat类

  • Point类

  • Size类

  • Rect类

  • Scalar类

  • Vec类

  • Range类


下面我们重点说一下MAT类。


4.1  Mat类


要熟练使用OpenCV,最重要的就是学会Mat数据结构,在OpenCV中Mat被定义为一个类,把它看作一个数据结构,以矩阵的形式来存储数据的。


Mat有哪些常见的属性?


  • dims:表示矩阵M的维度,如2*3的矩阵为2维,3*4*5的矩阵为3维

  • data:uchar型的指针,指向内存中存放矩阵数据的一块内存

  • rows, cols:矩阵的行数、列数

  • type:表示了矩阵中元素的类型(depth)与矩阵的通道个数(channels);命名规则为CV_ + (位数)+(数据类型)+(通道数)

    其中:U(unsigned integer)-- 无符号整数

    S(signed integer)-- 有符号整数

    F(float)-- 浮点数

    例如CV_8UC3,可拆分为:CV_:type的前缀,

    8U:8位无符号整数(depth),C3:3通道(channels)

  • depth:即图像每一个像素的位数(bits);这个值和type是相关的。例如CV_8UC3中depth则是CV_8U。

  • channels:通道数量,若图像为RGB、HSV等三通道图像,则channels = 3;若图像为灰度图,则为单通道,则channels = 1

  • elemSize:矩阵中每一个元素的数据大小

    elemSize = channels * depth / 8 

    例如:type是CV_8UC3,elemSize = 3 * 8 / 8 = 3bytes

  • elemSize1:单通道的矩阵元素占用的数据大小

        elemSize1 = depth / 8

        例如:type是CV_8UC3,elemSize1 = 8 / 8 = 1bytes


4.2  其他数据类型


1.点Point类

包含两个整型数据成员x和y,即坐标点


2.尺寸Size类

数据成员是width和height,一般用来表示图像的大小,或者矩阵的大小


3.矩形Rect类

数据成员x,y,width,height,分别代表这个矩形左上角的坐标点和矩形的宽度和高度


4.颜色Scalar类

Scalar_(_Tp v0, _Tp v1, _Tp v2=0, _Tp v3=0)

这个默认构造函数的四个参数分别表示RGB+Alpha颜色中的: 

v0---表示RGB中的B(蓝色)分量 

v1---表示RGB中的G(绿色)分量 

v2---表示RGB中的R(红色)分量 

v3---表示Alpha是透明色分量 


5.向量Vec类

一个“一维矩阵”

Vec<int,n>---就是用类型int和向量模板类做一个实例化。其中第一个参数int表示Vec中存储的为int类型;第二个参数n为一个整型值,表示Vec每个对象中存储n个int值,也就是n维向量(列向量)


6.Range类

用于指定一个连续的子序列,例如一个轮廓的一部分,或者一个矩阵的列空间


05 基本IO操作


这里使用的是python接口


1.图像读写

cv2.imread(文件名,显示控制参数)  # 读入图像   


cv2.imshow(窗口名,图像名)   #显示图像


cv2.imwrite(文件地址,文件名)  #保存图像


cv2.namedWindow(窗口名)  #创建窗口


cv2.destroyAllWindows() #销毁窗口


cv2.waitKey(   [,delay])  #decay > 0 等待delay 毫秒

                                      #decay < 0 等待键盘单击

                                      #decay =  0 无限等待

2.图像缩放

dst = cv2.resize(src,dsize,fx,fy)  #dsize表示缩放大小 

                                                   #fx,fy缩放比例

3.图像翻转

dst = cv2.flip(src,flipCode) 

        #flipCode=0 以X轴为对称轴的翻转 

        #lipCode>0 以Y轴为对称轴的翻转 

        #flipCode<0 对X、Y轴同时翻转

4.通道拆分与合并

b,g,r = cv2.split(图像) 

b = cv2.split(图像)[通道数] #拆分

bgr = cv2.merge([b,g,r]) #合并


06 相关学习资料


6.1  网络资料


  • OpenCV Docs官方文档 

    https://docs.opencv.org/

  • OpenCV 官方Github

    https://github.com/opencv/opencv

  • OpenCV 中文教程

    http://www.opencv.org.cn/opencvdoc/2.3.2/html/doc/tutorials/tutorials.html



6.2  中文书籍


  • Python计算机视觉编程

  • OpenCV 3计算机视觉:Python语言实现

  • OpenCV算法精解:基于Python与C++


最后,推荐一下大家的Opencv学习路线。


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

—THE END—

相关阅读

  • 图像传感器图像质量的四大误区!

  • 点击下方卡片,关注“新机器视觉”公众号重磅干货,第一时间送达本文源自安森美,作者:Geoff Ballew当前我们对图像传感器的依赖程度超出了大多数人的想象。图像传感器应用在汽车上
  • HA穷折腾(四)DIY智能电表

  • 点击蓝字关注我们本文为『瀚思彼岸』论坛精华文章,作者为dianxin11大神,在此表示感谢!文章版权归原作者所有,侵权必究。海鲜市场淘到一个有协议的1P电表,价格美丽,趁着过年时间充
  • 微软推出全新人工智能模型Kosmos-1

  • 【环球网科技综合报道】3月6日消息,据外媒报道,微软于近日推出了多模式大型语言模型Kosmos-1。据悉,Kosmos-1可以处理文本、图像、音频和视频等内容。比如,该模型可分析图像的内
  • 前端构建工具进化历程

  • 序言现在前端项目的开发过程离不开构建工具帮助,面对琳琅满目的构建工具我们该如何选择最合适自己场景的构建工具是一个问题。在研究各种配置之余,我们去研究一下构建工具发展
  • IJCV 2022|逆转特征让re-id模型从88.54%到0.15%

  • 新智元报道 作者:郑哲东编辑:QQ【新智元导读】攻击是为了更好的防御。这篇文章初版2018年5月就写好了,最近2022年12月才中。四年中得到了老板们的很多支持和理解。(这段经历
  • AI + Design,设计师真的会被取代吗?

  • 目录0、初体验1、AI绘画Stable Diffusion的原理解析2、AI能否替代设计师?3、未来会怎样?4、设计师与AI如何共处,竞争or合作?因为工作原因,20年底开始接触AIGC(文字类),从默默无闻到C
  • 零基础数字IC设计就业课程

  • 温馨提醒凡经过EETOP创芯大讲堂培训过的同学,如需工作推荐,请联系微信 ssywtt由于本课程在春节期间曾经实时75折巨幅优惠!虽然宣传多次,但还是有很多同学错过了此次优惠机会。为
  • TensorFlow图像分类教程

  • 点击下方卡片,关注“新机器视觉”公众号重磅干货,第一时间送达来源:阿里云云栖号导读:深度学习算法与计算机硬件性能的发展,使研究人员和企业在图像识别、语音识别、推荐引擎和机

热门文章

  • “复活”半年后 京东拍拍二手杀入公益事业

  • 京东拍拍二手“复活”半年后,杀入公益事业,试图让企业捐的赠品、家庭闲置品变成实实在在的“爱心”。 把“闲置品”变爱心 6月12日,“益心一益·守护梦想每一步”2018年四

最新文章

  • 投资新势力崛起,年轻人做投资有什么不同?

  • 1995后出生的一代被人们普遍称为“Z世代”,正在不断成长的他们正逐渐成为投资市场的主要力量。一方面,他们拥有富足的成长环境,更丰富的物质选择,另一方面,社会的不断转型预示着
  • 徐博观市 | 美联储会是“牛市终结者”吗?

  • 近1个月来,市场持续围绕“美联储紧缩”这一主题交易。伴随着重新上调对美联储紧缩力度的预期,并担心后者将同时伤害企业盈利以及打压估值水平,包括美股、港股在内的多个市场历
  • 光努力没用,月薪30K的视觉,到底做对了什么?

  • 新年跳槽季,什么岗位最火?C#+运动控制+机器视觉爆火,小米、特斯拉、比亚迪都在抢人,熟悉运动控制和机器视觉,再会点C#开发,薪资直接到30k,太疯狂!最近好多粉丝都在学了,担心没经验?学
  • ​计算机视觉方向必备opencv基础知识总览

  • 点击下方卡片,关注“新机器视觉”公众号重磅干货,第一时间送达曾经看过一个视频,树莓派自平衡机器人自动追着小球跑。不经让我脑子蹦出一个有趣的想法,可以做一个识别猫的机器人
  • 基于深度学习的源代码缺陷检测研究综述

  • 点击下方卡片,关注“新机器视觉”公众号重磅干货,第一时间送达源自:软件学报 作者:邓枭 叶蔚 谢睿 张世琨摘要源代码缺陷检测是判别程序代码中是否存在非预期行为的过程,
  • 图像传感器图像质量的四大误区!

  • 点击下方卡片,关注“新机器视觉”公众号重磅干货,第一时间送达本文源自安森美,作者:Geoff Ballew当前我们对图像传感器的依赖程度超出了大多数人的想象。图像传感器应用在汽车上