opencv笔记
文章平均质量分 88
本专栏为观看opencv课程笔记
opencv版本为:opencv-python 4.5.1.4
课程视频链接
https://study.163.com/course/introduction.htm?courseId=1
Suyuoa
这个作者很懒,什么都没留下…
展开
-
2.视频基本操作
cv2.VidelCapture可以捕获摄像头,用数字控制不同的设备,例如0,1 如果是视频文件,直接指定好路径即可首先我们导入opencv库以下的功能以图片形式是展示不出来的,我们可以使用专栏链接中的Py文件直接体验交过1读取一段视频注:上面的cv2.waitKey()中的参数,如果是1,则计算机处理图像速度越快,看的视频速度会越快,参数越大,视频的速度就会相应减慢以我的经验来讲,cv2.waitKey()里面的参数应该是等待的ms数,如果输入参数为10则会每一帧等待10ms..原创 2021-08-11 17:39:47 · 239 阅读 · 0 评论 -
1.图像基本操作
文档中涉及到的opencv版本为:opencv-python 4.5.1.48安装命令为 pip install opencv-python==4.5.1.48 我没有装opencv-contrib-python安装之后我们再安装matplotlib与numpy,这两个是配合opencv使用的库,我们会使用其中的几个功能,之后我们导入这三个库%matplotlib inline 是在jupyter notebook 中独有的用法,在下面课程中我不做使用,下面所介绍的每一个方法都是导入了这三个原创 2021-08-11 17:17:56 · 1489 阅读 · 0 评论 -
附录1 opencv的一些简易算法
从github或是其他地方看到的一些算法感觉很有意思,在这里介绍一下1图像转手绘import cv2from PIL import Imageimport numpy as npframe = cv2.imread('old.jpg')pilimg = Image.fromarray(np.uint8(frame))a = np.asarray(pilimg.convert('L')).astype('float')depth = 10. ..原创 2022-04-25 15:24:35 · 3183 阅读 · 0 评论 -
26.疲劳检测
目录1项目介绍2代码实现2.1导入库2.2定义68个关键点2.3定义eye_aspect_ratio()2.4定义参数2.5定义阈值2.6定义次数2.7创建检测器2.8获取左眼与右眼的起始点与终止点2.9读取视频2.10定义shape_to_np()2.11遍历每一帧2.11.1提取每一帧图像2.11.2图像预处理2.11.3检测人脸2.11.4遍历每一张检测的人脸2....原创 2021-09-15 14:46:54 · 10404 阅读 · 18 评论 -
25.人脸关键点检测
目录1项目介绍2代码实现2.1导入库2.2定义参数2.3定义点位2.4定义 shape_to_np()2.5定义 visualize_facial_landmarks()2.6创建人脸检测器2.7创建人脸68点预测器2.8图像预处理2.9人脸检测2.10找到关键点2.11遍历每一部分2.11.1写字2.11.2画圆2.11.3提取ROI2.11.4展示ROI与画好点的图...原创 2021-09-14 18:56:11 · 4240 阅读 · 1 评论 -
24.卷积原理
1神经网络我们先来看神经网络,大致分为下面几个过程有一批数据 网络前向传播,获取损失函数 之后反向传播,计算梯度(权重对损失函数的影响) 最后使用梯度更新参数神经网络就是通过前面四个步骤不停的循环,这个就是训练的过程2卷积神经网络应用场景卷积神经网络有下面几个应用场景第一个是Classification,这个是分类任务,检测出那个图像是猫,那个图像是够 第二个是Retrieval,这个是检索,功能类似于以图搜图 第三个是Detection,这个是检测,与分类任务有...原创 2021-09-14 15:13:39 · 3098 阅读 · 0 评论 -
23.人体追踪(加速处理)
上一章我们对人体追踪进行了普通处理,生成了追踪的结果,但是我们运行的时候感觉视频播放速度很慢,在这里我们对人体追踪进行加速处理,还是同样的素材,同样的环境,同样的模型目录1导入库2定义start_tracker()2.1生成追踪结果2.2进入循环3定义参数4定义两个队列的集合5定义标签6读模型7读视频8定义是否保存9开始计时10进入循环10.1读视频每一帧10.2图像预处理10.3判定...原创 2021-09-14 09:15:00 · 334 阅读 · 0 评论 -
22.人体追踪(普通处理)
目录1项目介绍2代码分析2.1环境安装2.2utils.py2.2.1__init__()2.2.2start()2.2.3stop()2.2.4update()2.2.5elapsed()2.2.6fps()2.3multi_object_tracking_slow.py2.3.1导入库2.3.2定义参数2.3.3定义标签2.3.4读取模型2.3.5读取视频2.3.6定义...原创 2021-09-13 17:33:16 · 2614 阅读 · 6 评论 -
21.目标追踪
目录1项目介绍2代码实现2.1导入库2.2配置参数2.3定义追踪算法2.4实例化一个(组)追踪器2.5读取视频2.6进入循环2.6.1取当前帧2.6.2调整每一帧的尺寸2.6.3获取追踪结果2.6.4绘制追踪结果2.6.5显示图像2.6.6选择追踪区域2.6.7退出1项目介绍我们当前有一个视频,我们在播放视频中在其中一帧对被检测物体画框画完之后,这个框一直跟着这个物体走...原创 2021-09-10 16:31:30 · 576 阅读 · 0 评论 -
20.opencv的DNN模块
DNN 深度神经网络这个是读模型的,像我现在用的模型是caffe训练出来的,所以用这个它也有别的框架的接口,比如我们现在看readNetFromCaffe()第一个参数是神经网络配置文件,第二个参数是训练好的模型1代码分析项目由两个py文件组成,一个是bolb_from_images.py这个是主函数,另一个是utils_paths.py这个py文件会在主函数中调用utils_paths只在bolb_from_images.py调用了一次,我们先看一下utils_p..原创 2021-09-10 10:57:15 · 1859 阅读 · 0 评论 -
19.光流估计
1介绍光流估计是判断移动物体的移动距离与方向亮度恒定,小运动,空间一致 是光流估计的三个前提下面是我们对之前行人的视频进行光流估计,下面绘制出的白色轨迹就是光流估计的结果2Lucas-Kanade算法光流估计是用这个算法做的上面这个方程使用的约束条件是亮度一致与小运动I是某一帧的像素点,x是横坐标,y是纵坐标,t是当前的对应帧数,这个约束方程的意思是,只有当我的点满足这个条件才能用,第二行是泰勒级数展开,我们最终通过约束方程得到了最后这个式子,我们求u和...原创 2021-09-09 16:41:24 · 2752 阅读 · 0 评论 -
18.背景建模
目录1帧插法2混合高斯模型2.1混合高斯模型的学习方法2.2混合高斯模型测试方法2.3.1导入库2.3.2读取视频2.3.3创建一个核2.3.4创建高斯混合模型 createBackgroundSubtractorMOG2()2.3.5进入循环 apply()背景:在视频中长时间不变化的图像内容背景建模有下面几种方法1帧插法我们把相邻的两帧(或更多帧)转为灰度图像后做差,就可以得出图像改变的区域得到差值后我...原创 2021-09-08 17:17:51 · 2020 阅读 · 0 评论 -
17.答题卡识别判卷
1项目介绍现在我有一张写好答案的答题卡并且我有一组答案为我们把正确的结果标出来,然后得出正确率2代码分析2.1导入库2.2设置参数2.3设置正确答案第0行的答案的B,第1行的答案是E,第2行的答案是A,第3行的答案是D,第4行的答案是B2.4定义找到四个角点的函数我觉得这个并不是很科学,我在该专栏的 11.提取图像内容区域 做过更改,我们可以使用我改过的函数2.5定义变换函数在该专栏的 11.提取图像内容区域 有讲...原创 2021-09-08 09:51:32 · 1623 阅读 · 0 评论 -
16.停车场车位识别
1项目介绍我现在有这样一个停车场的航拍视频parking_video,mp4处理视频与处理视频一样,就是把视频的每一帧抽出来然后处理图像我们现在做三个事情停车场一共有多少车位被占据 停车场一共有多少车位没被占据 标识出没有被占据的停车位结果是这样的,我们可以看到也不是特别准,这个是因为我数据量不够,如果增加数据量会有更好的效果由于我们要处理视频,这个项目对计算机的算力是有要求的,像我这个机器是NVIDIA GeForce GTX 970M,是无法让这个视频实时判定的(会..原创 2021-09-06 13:53:55 · 4638 阅读 · 7 评论 -
15.图像拼接
目录1项目介绍2代码实现2.1ImageStiching2.2Stitcher2.2.1cv_show()2.2.2stitch()2.2.3detectAndDescribe()2.2.4stitch()2.2.5matchKeyPoints()2.2.6stitch()2.2.7drawMatches()1项目介绍现在我们有不同角度照的两张图left.pngright.png我们最后要拼成...原创 2021-08-30 11:20:22 · 1965 阅读 · 1 评论 -
14.特征匹配
我们在上一篇文章获取了图像的特征,现在我们使用之前的特征进行特征匹配1Brute-Force 蛮力匹配1.1导入库1.2定义展示函数1.3读取灰度图像1.4获取两张图像的特征 detectAndCompute()detectAndCompute的第一个参数是要操作的图像,第二个参数是掩膜(mask),我们这个不使用掩膜,所以写None1.5特征匹配 BFMatcher(),match(),drawMatches()1.5.1一对一匹...原创 2021-08-30 11:05:49 · 451 阅读 · 0 评论 -
13.尺度不变特征转换SIFT
目录1理论部分1.1高斯模糊1.2多分辨率金字塔1.3高斯差分金字塔1.4DOG空间极值检测1.5关键点的精确定位1.6消除边界相应1.7特征点的主方向1.8生成特征描述2代码实现2.1得到特征点 xfeatures2d.SIFT_create(),detect(),drawKeypoints()2.2计算特征 compute()1理论部分感兴趣的朋友可以看一下视频的讲解,不感兴趣的可以直接进入代码实...原创 2021-08-25 15:34:33 · 180 阅读 · 0 评论 -
12.harris角点检测
1理论部分1.1简单来说我们一个图由三个主要部分构成A区域(平面),大部分图像由此构成,A区域的像素值与临近区域的像素值相似 B区域(边界),在一个方向上与临近区域相似,在另一个方向上与临近区域区别较大,像我们上面这个图就是x方向与临近区域相似,y方向与临近区域区别较大 C区域(角点),在两个方向上都与临近区域区别较大我们的角点检测是这样实现的下面这张图依次代表被检测区域为平面,边界,角点,我们拿到区域后会向四周移动区域,此时会得到移动次数组值,我们用移动后的新值-原图的老...原创 2021-08-25 13:34:26 · 193 阅读 · 0 评论 -
11.提取图像内容区域
1项目介绍我现在有这样一张小票思路是这样的,我们首先把小票部分提取出来,然后现在这个小票是歪的,我们把它放正,放正了之后用一个开源的库搞定2代码实现2.1导入库2.2添加参数这个在上一个项目讲过,如果要在外面控制台用的话,我们最好在项目完成后把required改成True2.3定义四个方法2.3.1 order_points作用是排好我们给的点,下面用的时候会讲到2.3.1.1视频中的方法我看了一下,感觉没有什么道理,为什么坐标...原创 2021-08-25 09:27:50 · 2184 阅读 · 6 评论 -
10.银行卡号识别
1项目介绍我们现在有一张银行卡我们还有一个模板效果是这样的我们切出银行卡上的每一个数字的区域,然后与我的模板进行匹配,匹配之后会得到与模板最像的区域,模板不同的区域就代表着不同的数字,这样就识别出来了图像处理的流程不唯一,我们当遇到其他项目问题的时候应该对着之前讲过的方法看一下,看看哪一种最合适并不是所有银行卡都能通用的,如果要找通用的还是要使用人工智能算法2代码实现2.1导入库首先我们导入库imutils这个包依赖numpy,opencv...原创 2021-08-20 11:23:30 · 2308 阅读 · 1 评论 -
9.傅里叶变换
1概念我们引入一个概念时域分析,我们9:00工作,12:00吃饭,以时间为节点进行分析,这个叫时域分析 频域分析,我们一周上五天班,一周吃7次午饭,吃午饭的频率要比上班的频率高,以时间发生的频率进行分析,这个叫频域分析任何的周期函数都可以通过若干正弦波堆叠出来我们观察上面这张图,在频率方向上频率值越大,正弦波的频率就越高(周期越短,峰值越低),我们就可以以频率值为x,峰值为y画出频域图像,时间方向就是正常时间对应的值我们再引入四个概念低频:灰度值变化缓慢的地方 高频:灰..原创 2021-08-18 17:59:08 · 241 阅读 · 0 评论 -
8.直方图
1原理我们统计图像中的每个像素点的值,然后把每个值绘制成直方图images 被统计的图像 channels 被统计的图像通道,可以只为B,G,R其中一个通道 mask 掩膜的意思是提取图像的一部分 histSize 直方图横坐标的取值范围,全部是0-255,也就是[256],我可以把横坐标改小,比如[200] ranges 像素取值范围,一般为[0:256],也可以改小,比如[0:200]一般来讲最后的两个参数是不变的2代码实现 calcHist()下面我们看一下该...原创 2021-08-17 09:29:39 · 716 阅读 · 0 评论 -
7.模板匹配
1概念左边这张脸我们称之为模板,我们使用模板匹配右边的图像,获取模板是图像的哪一部分原创 2021-08-17 09:23:19 · 1001 阅读 · 0 评论 -
6.图像轮廓
轮廓与边缘的区别,轮廓是图像中物体最外层的线条,边缘是图像最外层线条内还包含着其他的线条轮廓逼近方法,左边是第一种,全部显示轮廓,右边的第二种,把能表示轮廓的点显示出来,其余线条不显示,第二种方式更省内存上面这个是轮廓检测的方法,在使用这个方法之前我们还需要进行其他的步骤1使用二值图像这一步是为了更高的准确率而做的,如果不要准确率可以不做我们转完灰度图,之后进行阈值处理,阈值处理在 1.图像基本操作 中的14提到过,处理过后我们把图片显示出来2轮廓检测之后我们...原创 2021-08-13 17:58:40 · 801 阅读 · 0 评论 -
5.图像金字塔
图像金字塔可以尽可能清晰的放大和缩小图片目录1高斯金字塔1.1理论1.1.1向下采样方法(缩小)1.1.2向上采样方法(放大)1.2代码实现1.2.1向上采样(放大)1.2.2向下采样(减小)2拉普拉斯金字塔2.1理论2.2代码实现1高斯金字塔1.1理论1.1.1向下采样方法(缩小)是向金字塔塔顶走的,它这个金字塔应该倒过来看第一步 带归一化的高斯滤波 第二步 去除所有偶数行和列这...原创 2021-08-13 15:01:11 · 228 阅读 · 0 评论 -
4.边缘检测
目录1 理论1.1第一步 高斯滤波1.2第二步 梯度强度与方向1.3第三步 非极大值抑制1.3.1第一种方法1.3.2第二种方法1.4第四步 双阈值检测2代码实现1 理论下面是边缘检测的五个步骤第一步滤波,之前提到过,此处canny边缘检测使用的是高斯滤波 第二步计算梯度,之前提到过,强度是该店的梯度值,方向是纵向与横向组成的方向 第三步抑制,使用 非极大值 方法,消除核内其他的梯度,取强度最高的梯度非极大值抑制,我举个例子,...原创 2021-08-13 11:09:44 · 776 阅读 · 0 评论 -
3.图像梯度处理
目录1Sobel算子1.1概念1.2例子1.2.1横向1.2.2纵向1.2.3总梯度计算2Scharr算子3laplacian算子1Sobel算子1.1概念我们先了解一下什么情况下存在梯度在画红框的区域中是没用梯度的,因为区域中没用色差在画的这条线的左右也没有梯度,因为线的左右没有色差像在这个点上就存在梯度我们接下来把梯度计算出来,我们要使用sobel算子其中GX是水平梯度,GY是竖直梯度...原创 2021-08-12 13:42:54 · 629 阅读 · 0 评论