2021SC@SDUSC

1. OpenCV 初识与安装
本部分要了解 OpenCV (Open Source Computer Vision Library)的相关简介,OpenCv 可以运行在多平台之上,轻量级而且高效,由一系列 C 函数和少量 C++类构成,提供了 Python、Ruby、MATLAB 等语言的接口,所以在学习的时候,要注意查阅资料的语言实现相关问题。

这个阶段除了安装 OpenCV 相关库以外,建议收藏官方网址,官方手册,官方入门教程,这些都是最佳的学习资料。

模块安装完毕,需要重点测试 OpenCV 是否安装成功,可通过 Python 查询安装版本。

2. OpenCV 模块简介
先从全局上掌握 OpenCV 都由哪些模块组成。例如下面这些模块,你需要找到下述模块的应用场景与简介。

core、imgproc、highgui、calib3d、features2d、contrib、flann、gpu、legacy、ml、objdetect、photo、stitching。

整理每个模块的核心功能,并完成第一个 OpenCV 案例,读取显示图片。

3. OpenCV 图像读取,显示,保存
安装 OpenCV 之后,从图像获取开始进行学习,包含本地加载图片,相机获取图片,视频获取,创建图像等内容。

只有先获取图像之后,才能对图像进行操作处理,信息提取,结果输出,图像显示,图像保存。

对于一个图像而言,在 OpenCV 中进行读取展示的步骤如下,你可以将其代码进行对应。

图像读取;
窗口创建;
图像显示;
图像保存;
资源释放。
涉及需要学习的函数有 cv2.imread()、cv2.namedWindow()、cv2.imshow()、cv2.imwrite()、cv2.destroyWindow()、cv2.destroyAllWindows()、 cv2.imshow()、cv2.cvtColor()、cv2.imwrite()、cv2.waitKey()。

4. 摄像头和视频读取,保存
第一个要重点学习 VideoCapture 类,该类常用的方法有:

open() 函数;
isOpened() 函数;
release() 函数;
grab() 函数;
retrieve() 函数;
get() 函数;
set() 函数;
除了读取视频外,还需要掌握 Opencv 提供的 VideoWriter 类,用于保存视频文件。

学习完相关知识之后,可以进行这样一个实验,将一个视频逐帧保存为图片。

5. OpenCV 常用数据结构和颜色空间
这部分要掌握的类有 Point 类、Rect 类、Size 类、Scalar 类,除此之外,在 Python 中用 numpy 对图像进行操作,所以 numpy 相关的知识点,建议提前学习,效果更佳。

OpenCV 中常用的颜色空间有 BGR 颜色空间、HSV/HLS 颜色空间、Lab 颜色空间,这些都需要了解,优先掌握 BGR 颜色空间。

6. OpenCV 常用绘图函数
掌握如下函数的用法,即可熟练的在 Opencv 中绘制图形。

cv2.line();
cv2.circle();
cv2.rectangle();
cv2.ellipse();
cv2.fillPoly();
cv2.polylines();
cv2.putText()。
7. OpenCV 界面事件操作之鼠标与滑动条
第一个要掌握的函数是鼠标操作消息回调函数,cv2.setMouseCallback() ,滑动条涉及两个函数,分别是:cv2.createTrackbar() 和 cv2.getTrackbarPos()。

掌握上述内容之后,可以实现两个案例,其一为鼠标在一张图片上拖动框选区域进行截图,其二是通过滑动条让视频倍速播放。

8. 图像像素、通道分离与合并
了解图像像素矩阵,熟悉图片的像素构成,可以访问指定像素的像素值,并对其进行修改。

通道分离函数 cv2.split(),通道合并函数 cv2.merge()。

9. 图像逻辑运算
掌握图像之间的计算,涉及函数如下:

cv2.add();
cv2.addWeighted();
cv2.subtract();
cv2.absdiff();
cv2.bitwise_and();
cv2.bitwise_not();
cv2.bitwise_xor()。
还可以研究图像乘除法。

10. 图像 ROI 与 mask 掩膜
本部分属于 OpenCV 中的重点知识,第一个为感兴趣区域 ROI,第二个是 mask 掩膜(掩码)操作 。

学习 ROI 部分时,还可以学习一下图像的深浅拷贝。

11. 图像几何变换
图像几何变换依旧是对基础函数的学习与理解,涉及内容如下:

图像缩放 cv2.resize();
图像平移 cv2.warpAffine();
图像旋转 cv2.getRotationMatrix2D();
图像转置 cv2.transpose();
图像镜像 cv2.flip();
图像重映射 cv2.remap()。
12. 图像滤波
理解什么是滤波,高频与低频滤波,图像滤波函数。

线性滤波:方框滤波、均值滤波、高斯滤波,
非线性滤波:中值滤波、双边滤波,

方框滤波 cv2.boxFilter();
均值滤波 cv2.blur();
高斯滤波 cv2.GaussianBlur();
中值滤波 cv2.medianBlur();
双边滤波 cv2.bilateralFilter()。
13. 图像固定阈值与自适应阈值
图像阈值化是图像处理的重要基础部分,应用很广泛,可以根据灰度差异来分割图像不同部分,阈值化处理的图像一般为单通道图像(灰度图),核心要掌握的两个函数:

固定阈值:cv2.threshold();
自适应阈值:cv2.adaptiveThreshold()。
14. 图像膨胀腐蚀
膨胀、腐蚀属于形态学的操作,是图像基于形状的一系列图像处理操作。
膨胀腐蚀是基于高亮部分(白色)操作的,膨胀是対高亮部分进行膨胀,类似“领域扩张”, 腐蚀是高亮部分被腐蚀,类似“领域被蚕食”。

膨胀腐蚀的应用和功能:

消除噪声;
分割独立元素或连接相邻元素;
寻找图像中的明显极大值、极小值区域;
求图像的梯度;
核心需要掌握的函数如下:

膨胀 cv2.dilate();
腐蚀 cv2.erode()。
形态学其他操作,开运算、闭运算、顶帽、黑帽、形态学梯度 这些都是基于膨胀腐蚀基础之上,利用 cv2.morphologyEx() 函数进行操作。

15. 边缘检测
边缘检测可以提取图像重要轮廓信息,减少图像内容,可用于分割图像、特征提取等操作。

边缘检测的一般步骤:

滤波: 滤出噪声対检测边缘的影响 ;
增强: 可以将像素邻域强度变化凸显出来—梯度算子 ;
检测: 阈值方法确定边缘 ;
常用边缘检测算子:

Canny 算子,Canny 边缘检测函数 cv2.Canny();
Sobel 算子,Sobel 边缘检测函数 cv2.Sobel();
Scharr 算子,Scharr 边缘检测函数 cv2.Scahrr() ;
Laplacian 算子,Laplacian 边缘检测函数 cv2.Laplacian()。
16. 霍夫变换
霍夫变换(Hough Transform)是图像处理中的一种特征提取技术,该过程在一个参数空间中,通过计算累计结果的局部最大值,得到一个符合该特定形状的集合,作为霍夫变换的结果。

本部分要学习的函数:

标准霍夫变换、多尺度霍夫变换 cv2.HoughLines() ;
累计概率霍夫变换 cv2.HoughLinesP() ;
霍夫圆变换 cv2.HoughCricles() 。
17. 图像直方图计算及绘制
先掌握直方图相关概念,在掌握核心函数,最后通过 matplotlib 模块对直方图进行绘制。计算直方图用到的函数是 cv2.calcHist()。

直方图相关应用:

直方图均衡化 cv2.equalizeHist();
直方图对比 cv2.compareHist();
反向投影 cv2.calcBackProject()。
18. 模板匹配
模板匹配是在一幅图像中寻找与另一幅模板图像最匹配(相似)部分的技术。

核心用到的函数如下:

模板匹配 cv2.matchTemplate();
矩阵归一化 cv2.normalize();
寻找最值 cv2.minMaxLoc()。
19. 轮廓查找与绘制
核心要理解到在 OpenCV 中,查找轮廓就像在黑色背景中找白色物体。

常用函数:

查找轮廓 cv2.findContours();
绘制轮廓 cv2.drawContours() 。
最后应该掌握针对每个轮廓进行操作。

20. 轮廓特征属性及应用
这部分内容比较重要,并且知识点比较多,核心内容与函数分别如下:

寻找凸包 cv2.convexHull() 与 凸性检测 cv2.isContourConvex();
轮廓外接矩形 cv2.boundingRect();
轮廓最小外接矩形 cv2.minAreaRect();
轮廓最小外接圆 cv2.minEnclosingCircle();
轮廓椭圆拟合 cv2.fitEllipse();
逼近多边形曲线 cv2.approxPolyDP();
计算轮廓面积 cv2.contourArea();
计算轮廓长度 cv2.arcLength();
计算点与轮廓的距离及位置关系 cv2.pointPolygonTest();
形状匹配 cv2.matchShapes()。
21. 高级部分-分水岭算法及图像修补
掌握分水岭算法的原理,掌握核心函数 cv2.watershed() 。

可以扩展补充图像修补技术及相关函数 cv2.inpaint(),学习完毕可以尝试人像祛斑应用。

22. GrabCut & FloodFill 图像分割、角点检测
这部分内容都需要一些图像专业背景知识,先掌握相关概念知识,在重点学习相关函数。

GrabCut 算法 cv2.grabCut();
漫水填充算法 cv2.floodFill();
Harris 角点检测 cv2.cornerHarris();
Shi-Tomasi 角点检测 cv2.goodFeaturesToTrack();
亚像素角点检测 cv2.cornerSubPix()。
23. 特征检测与匹配
特征点的检测和匹配是计算机视觉中非常重要的技术之一, 在物体识别、视觉跟踪、三维重建等领域都有很广泛的应用。

OpenCV 提供了如下特征检测方法:

“FAST” FastFeatureDetector;
“STAR” StarFeatureDetector;
“SIFT” SIFT(nonfree module) Opencv3 移除,需调用 xfeature2d 库;
“SURF” SURF(nonfree module) Opencv3 移除,需调用 xfeature2d 库;
“ORB” ORB Opencv3 移除,需调用 xfeature2d 库;
“MSER” MSER;
“GFTT” GoodFeaturesToTrackDetector;
“HARRIS” (配合 Harris detector);
“Dense” DenseFeatureDetector;
“SimpleBlob” SimpleBlobDetector。
24. OpenCV 应用部分之运动物体跟踪与人脸识别
了解何为运动物体检测,OpenCV 中常用的运动物体检测方法有背景减法、帧差法、光流法,跟踪算法常用的有 meanShift, camShift,粒子滤波, 光流法 等。

meanShift 跟踪算法 cv2.meanShift();
CamShift 跟踪算法 cv2.CamShift()。
如果学习人脸识别,涉及的知识点为:

人脸检测:从图像中找出人脸位置并标识;
人脸识别:从定位到的人脸区域区分出人的姓名或其它信息;
机器学习。

opencv人脸检测

# coding:utf-8

# 结论:直接使用opnecv可以实时监测人脸:
# imread: 0.0065610408782958984
# gray: 0.0018565654754638672
# classifier: 0.10116839408874512
# detect: 0.05451011657714844
# draw: 0.0002307891845703125
# write: 0.00553131103515625
# all: 0.1702742576599121

import cv2   
import time

# 准备图片,并使用cv2读取
impath_1 = "new.jpg"
impath_2 = "new_2.jpg"
allstart = time.time()
image_1=cv2.imread(impath_1)
image_2=cv2.imread(impath_2)
print("imread:", time.time()- allstart)

# opencv进行人脸识别是基于灰度图,所以需要先转换为灰度图
start = time.time()
gray_1=cv2.cvtColor(image_1,cv2.COLOR_BGR2GRAY)
gray_2=cv2.cvtColor(image_2,cv2.COLOR_BGR2GRAY)
print("gray:", time.time()-start)

# 加载检测器
start = time.time()
face_cade=cv2.CascadeClassifier(r'./haarcascade_frontalface_default.xml')
print("classifier:", time.time()-start)

# 开始检测人脸
start = time.time()
fa_1=face_cade.detectMultiScale(gray_1,scaleFactor=1.15,minNeighbors=5)
fa_2=face_cade.detectMultiScale(gray_2,scaleFactor=1.15,minNeighbors=5)
print("detect:", time.time()-start)

# 在原始图片中绘制人脸框
start = time.time()
for (x,y,w,h) in fa_1:
    cv2.rectangle(image_1,(x,y),(x+w,y+h),(0,255.0),2)
for (x,y,w,h) in fa_2:
    cv2.rectangle(image_2,(x,y),(x+w,y+h),(0,255.0),2)
print("draw:", time.time()-start)

# 回写
start = time.time()
cv2.imwrite('cv_final.jpg',image_1)
cv2.imwrite('cv_final_2.jpg',image_2)
print("write:", time.time()-start)
print("all:", time.time()-allstart)

树莓派4B--openCV简单教程及人脸识别相关推荐

  1. 树莓派4b Opencv安装(真实有效)——授人鱼不如授人以渔

    树莓派4b OpenCV安装(真实有效)--授人鱼不如授人以渔 前言 巨人的肩膀 树莓派配置 扩容 换源(我选的清华大学源): 下载依赖 Opecv下载 离线安装方法: 使用wget下载OpenCV源 ...

  2. 基于opencv和pillow实现人脸识别系统(附demo)

    更多python教程请到友情连接: 菜鸟教程https://www.piaodoo.com 初中毕业读什么技校 http://cntkd.net 茂名一技http://www.enechn.com p ...

  3. python人脸识别系统下载_简单的Python人脸识别系统

    案例一 导入图片 思路: 1.导入库 2.加载图片 3.创建窗口 4.显示图片 5.暂停窗口 6.关闭窗口 # 1.导入库 import cv2 # 2.加载图片 img = cv2.imread(' ...

  4. 3d人脸识别算法opencv_用Opencv打造自己的人脸识别

    # 用Opencv打造自己的人脸识别 标签: opencv 人脸识别在现在使用的越来越多,所以使用opencv构造一个简单的人脸识别.步骤包括收集及处理数据,构建人脸识别器,进行人脸识别. 收集数据 ...

  5. 人脸识别闸机python_简单的Python人脸识别系统

    案例一 导入图片 思路: 1.导入库 2.加载图片 3.创建窗口 4.显示图片 5.暂停窗口 6.关闭窗口 # 1.导入库 import cv2 # 2.加载图片 img = cv2.imread(' ...

  6. Python OpenCV开发MR智能人脸识别打卡系统(三、工具模块设计)

    需要源码请点赞关注收藏后评论区留言私信~~~ 整体系统讲解如下 Python OpenCV开发MR智能人脸识别打卡系统(一.需求分析与系统设计) Python OpenCV开发MR智能人脸识别打卡系统 ...

  7. OpenCV实践之路——人脸识别之三识别自己的脸

    本文由@星沉阁冰不语出品,转载请注明作者和出处. 文章链接:http://blog.csdn.net/xingchenbingbuyu/article/details/51472330 微博:http ...

  8. python读取视频流做人脸识别_基于OpenCV和Keras实现人脸识别系列——二、使用OpenCV通过摄像头捕获实时视频并探测人脸、准备人脸数据...

    基于OpenCV和Keras实现人脸识别系列手记: 项目完整代码参见Github仓库. 本篇是上面这一系列手记的第二篇. 在Opencv初接触,图片的基本操作这篇手记中,我介绍了一些图片的基本操作,而 ...

  9. 深度学习之基于opencv和CNN实现人脸识别

    这个项目在之前人工智能课设上做过,但是当时是划水用的别人的.最近自己实现了一下,基本功能可以实现,但是效果并不是很好.容易出现错误识别,或者更改了背景之后识别效果变差的现象.个人以为是数据选取的问题, ...

最新文章

  1. 区块链系列4-智能合约
  2. 税前2万4,到手1万4,年终奖扣税方式1月1日起施行~
  3. python中if错误-Python中错误和异常
  4. ML之xgboost:利用xgboost算法(特征筛选和GridSearchCV)对数据集实现回归预测
  5. 如何利用OpenCV自带的级联分类器训练程序训练分类器
  6. Oracle 获取表注释和列注释
  7. 暗能量什么样?爱因斯坦只“蒙”对了一半
  8. php获取客户端信息(浏览器/IP/操作系统)代码
  9. html5开发播放器,larkplayer: 插件化的 HTML5 播放器
  10. (5) 学习笔记_numpy
  11. 计算机图形学-消隐算法
  12. pdf 分形 张济忠_分形
  13. 后端+数据库(pycharm+mysql):使用 “flask”制作的调查量表/问卷
  14. R语言绘制NMDS图
  15. Ubuntu各版本代号
  16. 打开图片时提示windows照片查看器无法显示图片内存不足该如何解决
  17. SpaceEye :12种地球实时卫星照片壁纸
  18. 嵌入式硬件设计:电感
  19. 解决Win2016提示 “发生身份验证错误 要求的函数不受支持“的问题
  20. 基于Token的身份验证的原理

热门文章

  1. Invalid bound statement (not found): com.xxx.xxx.mapper.xxxMapper.xxx
  2. excel排版:人工定制列宽时部分列宽参数
  3. excel排版转换为印刷版:设置页面是否区分为奇数偶数页
  4. Oracle9i升级到oracle10g
  5. css order使用
  6. java计算机毕业设计科研团队管理系统源码+mysql数据库+系统+lw文档+部署
  7. python怎么写自己的名字_用python写一个序列图改名工具
  8. 长沙大学生毕业后工资有多少?
  9. 苹果 android专利,苹果新专利:类似Android但更复杂的图形解锁
  10. Ubuntu 18.04 蓝牙不自动连接且不稳定解决