- 博客(32)
- 收藏
- 关注
原创 数据结构学习记录08——栈的应用1
文章目录1.问题的提出2.解决方案2.1.算法思路2.2.算法框架3.程序演示4.总结1.问题的提出 在C语言或者其他编程语言中,有一些符号是成对匹配出现的,例如各种括号,引号,几乎所有的编译器都具备检测括号是否匹配的能力。 为此,我们就来写一个程序来仿照编译器中的符号成对检测。2.解决方案2.1.算法思路 1.从第一个字符开始扫描; 2.当遇见普通字符时忽略,当遇见左符号时压入栈中; 3.当遇见右符号时从栈中弹出栈顶符号; 4.进行匹配: (1)匹配成功:继续读入下一
2021-03-07 18:25:44
139
原创 数据结构学习记录07——栈的定义及实现
文章目录1.栈的定义及性质1.栈的定义及性质 栈是一种特殊的线性表,是限定仅在表尾进行插入或删除操作的线性表。
2021-03-03 15:57:30
181
原创 数据结构学习记录06——线性表之双向链表
文章目录前言1.双向链表的定义2.双向链表的操作2.1创建2.2销毁2.3清空2.4获取长度2.5插入元素2.6获取元素2.7删除元素2.8删除指定元素2.9重置游标2.10获取当前游标指向的元素2.11移动游标指向下一个元素2.12移动游标指向上一个元素3.测试前言 双向变量同样也是在单链表的基础上进行改进。单链表存在着以下局限: 1.单链表的结点都只有一个指向下一个结点的指针; 2.单链表的数据元素无法直接访问其前驱元素。 对于访问前驱元素,我们或许会想到逆序访问,但是逆序访问单链表中
2021-02-10 11:42:48
169
原创 数据结构学习记录05——线性表之循环链表
文章目录前言1.循环链表的定义2.循环链表的操作2.1创建2.2销毁2.3清空2.4获取长度2.5插入元素2.6获取元素2.7删除元素2.8删除指定元素2.9重置游标2.10获取当前游标指向的数据元素2.11移动游标指向下一个元素3.测试3.1常规测试3.2循环链表测试前言 单链表是一种很强大的线性表,但它不是完美无瑕的。在生活中,不是所有的事物和关系都能用单链表来表示,例如一年有12个月,并且这12个月都是循环排列的,再有就是十二生肖,都是从子鼠开始,到亥猪为一个周期,然后周而复始地循环。 单链
2021-02-05 22:04:33
239
原创 数据结构学习记录04——线性表之静态链表
文章目录前言1.静态链表的定义2.静态链表的常用操作2.1创建2.2销毁2.3清空2.4获取长度2.5获取容量2.6插入元素2.7获取元素2.8删除元素3.测试前言 上一节讲了单链表的操作,可以看出单链表解决了顺序存储结构的不足,但是单链表也有其相对劣势:单链表的实现严重依赖指针!数据元素中必须包含一个额外的指针域!没有指针的语言无法实现! 为此,我们就引入了静态链表,静态链表可以说是在顺序表的基础上进行了改进。1.静态链表的定义 在顺序表的基础上,做了如下改进: 1.顺序表数组中的元素
2021-02-04 14:57:18
132
原创 数据结构学习记录02——线性表之顺序存储结构
文章目录1.线性表的本质2.线性表的相关操作1.线性表的本质 线性表是零个或多个数据元素的集合,其数据元素之间是有顺序的,个数是有限的,并且类型必须相同。 书上的定义:线性表是由n(n≥0)个数据特性相同的元素构成的有限序列。 线性表中,1)a0为第一个元素,只有一个后继;2)an为最后一个元素,只有一个前驱;3)其它元素ai,既有前驱,也有后继,线性表能够逐项访问和顺序存取。2.线性表的相关操作 假设我们要实现一个图书信息管理系统,每种图书仅包括三部分信息:ISBN、书名和价格,那么这
2021-01-31 20:33:58
176
原创 数据结构学习记录01——绪论
文章目录0.前言1.基本概念和术语0.前言 好久没写博客了,今天算是重出江湖了吧,以后会记着坚持写的。 最近在学习数据结构,参考教材是严蔚敏的《数据结构(C语言版)》第二版,至于为什么用第二版,或许是觉得这本书看着要顺眼一些吧(????),同时还在看国嵌的数据结构视频。1.基本概念和术语 计算机的程序是用来处理一些信息和数据的,那么什么是程序呢?国嵌里是这样说的,程序是为了实际问题而存在的,从本质上来说,程序是解决问题的步骤描述。 评鉴一个程序:用尽量少的内存空间解决问题;用尽量少的
2021-01-26 20:03:33
389
1
原创 Python+opencv学习记录24:人脸检测
学习opencv也有一段时间了,opencv里的知识要深究的话,可以说是无穷无尽,里面的要用到的数学知识很丰富,只可惜自己的数学达不到那种程度,所以只能通过相应的实践来弥补了。最近做了一个简单的人脸检测来结束目前opencv的基础学习,之后的路依然要脚踏实地地走下去。文章目录1.原理2.实际操作2.1.人脸检测2.2.人脸和眼睛的检测完整代码1.原理做人脸检测,首先要从图像中提取出特征,而本...
2020-04-03 10:28:30
310
原创 Python+opencv学习记录23:分水岭算法
文章目录1.算法简介2.分水岭图像分割2.1.获取灰度图像,二值化图像,进行降噪2.2.形态学操作进一步消除噪点2.3.膨胀操作获得大部分背景区域2.4.距离变换获取确定的前景色2.5.获取种子2.6.分水岭变换完整代码1.算法简介分水岭算法(Watershed Algorithm),是根据分水岭的构成来考虑图像的分割。现实中我们可以或者说可以想象有山有湖的景象,那么那一定是水绕山,山围水的情...
2020-03-28 10:21:47
587
原创 Python+opencv学习记录22:开闭操作
文章目录1.开闭操作原理1.1开操作1.2闭操作2.开闭操作的应用2.1开操作2.2闭操作3.提取物体特征完整代码1.开闭操作原理图像处理中的开闭运算是两个很重要的形态学操作,它们两个从基本的腐蚀与膨胀操作演变而来的,这些操作主要应用在二值图像的处理上,灰度图像也可以。1.1开操作开操作是先腐蚀,后膨胀,作用是用来消除小物体和噪点、平滑较大物体的边界的同时并不明显改变其面积,提取水平或竖直...
2020-03-26 10:27:12
354
原创 Python+opencv学习记录21:膨胀与腐蚀
文章目录1.原理1.1膨胀1.2腐蚀2.相应的代码2.1腐蚀操作2.2膨胀操作3.彩色图像的膨胀与腐蚀完整代码1.原理腐蚀与膨胀是最基本的两个形态学操作,它们的作用有:1.消除噪声;2.分割独立的图像元素,以及连接相邻的元素;3.寻找图像中的明显的极大值区域或极小值区域。1.1膨胀膨胀将图像A与任意形状的内核B(通常为正方形或圆形)进行卷积,内核B有一个可定义的锚点,通常定义为内核中...
2020-03-25 10:25:56
379
原创 Python+opencv学习记录20:轮廓发现
文章目录1.轮廓发现1.1发现轮廓1.2绘制轮廓2.操作步骤2.1阈值法获取轮廓2.2使用Canny边缘检测获取轮廓完整代码1.轮廓发现轮廓发现是基于图像边缘提取的基础寻找对象轮廓的方法,所以边缘提取的阈值选定会影响最终轮廓发现结果。1.1发现轮廓在此步骤中我们会使用到findContours这个API,其原型为:cv2.findContours(image, mode, method[...
2020-03-23 10:01:19
299
原创 Python+opencv学习记录19:圆检测
文章目录1.霍夫圆变换原理2.霍夫圆检测完整代码1.霍夫圆变换原理霍夫圆变换是将二维图像空间中一个圆转换为该圆半径、圆心横纵坐标所确定的三维参数空间中一个点的过程,因此圆周上任意三点所确定的圆经过霍夫变换后在三维参数空间应对应一点。该过程类似于选举投票过程,圆周上任意三个点为一选举人,而这三个点所确定的圆则为一侯选人。遍历圆周上所有点,任意三个点所确定的候选圆进行投票,遍历结束后,得票数最高点...
2020-03-22 11:03:01
478
原创 Python+opencv学习记录18:直线检测
文章目录1.霍夫变换2.霍夫直线变换2.1霍夫检测的Opencv实现2.1.1HoughLines(标准霍夫变换,多尺度霍夫变换)2.1.2HoughLinesP(渐进概率式霍夫变换)完整代码1.霍夫变换霍夫变换(Hough Transform)于1962年首次提出,是图像处理领域内从图像中检测几何形状的基本方法之一。经典霍夫变换用来检测图像中的直线,后来霍夫变换经过扩展可以进行任意形状物体的...
2020-03-21 10:15:27
564
原创 Python+opencv学习记录17:Canny边缘提取
文章目录1.Canny算法的介绍2.Canny算法流程完整代码1.Canny算法的介绍Canny算法是一种边缘检测算法,它是由John Canny在1986年提出的。Canny边缘检测是从不同视觉对象中提取有用的结构信息并大大减少要处理的数据量的一种技术,目前已广泛应用于各种计算机视觉系统。2.Canny算法流程Canny边缘检测算法是由以下步骤组成的:1.图像降噪。梯度算子可以用于增...
2020-03-20 09:35:57
321
原创 Python+opencv学习记录16:图像梯度
文章目录1.图像梯度2.一阶导数与Sobel算子3.二阶导数与Laplacian算子完整代码1.图像梯度梯度从微积分的角度来说就是求导,即:在图像处理中,梯度常被用于提取图像边缘,经典的图像梯度算法是考虑图像的每个像素的某个邻域内的灰度变化,利用边缘临近的一阶或二阶导数变化规律,对原始图像中像素某个邻域设置梯度算子,通常我们用小区域模板进行卷积来计算。Opencv提供了三种类型的梯度滤波...
2020-03-19 10:19:02
325
原创 Python+opencv学习记录15:图像金字塔
文章目录1.图像金字塔2.高斯金字塔3.拉普拉斯金字塔完整代码1.图像金字塔图像金字塔是图像多尺度表达的一种,是一种以多分辨率来解释图像的有效但概念简单的结构。一幅图像的金字塔是一系列以金字塔形状排列的分辨率逐步降低,且来源于同一张原始图的图像集合。其通过梯次向下采样获得,直到达到某个终止条件才停止采样。我们将一层一层的图像比喻成金字塔,层级越高,则图像越小,分辨率越低。图像金字塔主要有高...
2020-03-18 10:10:55
296
原创 Python+opencv学习记录14:超大图像二值化
文章目录1.全局阈值2.局部阈值完整代码在图像处理中,我们有时候会碰到一些超大图像,那种像素值特别高的图像,如果直接处理会因为图像的问题造成一些细节被忽略,因此我们要对图像进行切分,分块处理。与上一篇文章一样,超大图像的二值化处理也有全局和局部之分。1.全局阈值在进行超大图像的处理时,我们应1.先将图像分块,每个块为256*256,2.接着获取超大图像的宽和高,将原图像转换为灰度图像,...
2020-03-17 09:52:55
303
原创 Python+opencv学习记录13:图像二值化
文章目录1.图像二值化2.阈值2.1.阈值的定义2.2.阈值类型2.2.1.二进制阈值化(cv2.THRESH_BINARY)2.2.2.反二进制阈值化(cv2.THRESH_BINARY_INV)2.2.3.截断阈值化(cv2.THRESH_TRUNC)2.2.4.阈值化为0(cv2.THRESH_TOZERO)2.2.5.反阈值化为0(cv2.THRESH_TOZERO_INV)3.图像二值化...
2020-03-15 11:18:42
503
原创 Python+opencv学习记录11:直方图反向投影
文章目录1.直方图反向投影原理2.2D直方图的制作与显示3.直方图反向映射完整代码1.直方图反向投影原理直方图反向投影用于图像分割或查找图像中感兴趣的对象,简单来说,它会创建一个与输入图像大小相同(单个通道)的图像,其中每个像素对应于属于我们对象该像素的概率.输出图像将使我们感兴趣的对象比其余部分更明显。首先,我们创建一个包含我们感兴趣对象的图像的直方图,对象应尽可能填充图像以获得更好的结果...
2020-03-13 11:45:07
238
1
原创 Python+opencv学习记录12:模板匹配
文章目录1.模板匹配原理2.模板匹配算法1.模板匹配原理模板匹配是一种最原始、最基本的模式识别方法,研究某一特定对象物的图案位于图像的什么地方,进而识别对象物,这就是一个匹配问题。它是图像处理中最基本、最常用的匹配方法。模板匹配具有自身的局限性,主要表现在它只能进行平行移动,若原图像中的匹配目标发生旋转或大小变化,该算法无效。模板匹配就是在整个图像区域发现与给定子图像匹配的小块区域,所以模板...
2020-03-13 11:07:40
276
1
原创 Python+opencv学习记录10:直方图应用
文章目录1.直方图均衡化2.直方图比较完整代码1.直方图均衡化直方图均衡化是利用图像直方图对对比度进行调整的方法,这种方法对于背景和前景都太亮或者太暗的图像非常有用。通俗来讲,就是一张图像中某一个像素点会特别集中,这时候我们可以通过直方图均衡化来将其分布得更均匀,从而得到图像更加清晰的目的。(个人理解,如有错误,欢迎大家来指正)直方图均衡化的代码有两种,第一种是直接均衡化,代码如下:de...
2020-03-08 21:29:22
285
2
原创 Python+opencv学习记录9:图像直方图
文章目录1.什么是图像直方图2.实际操作2.1.绘图库的安装2.2.绘图库直接计算直方图1.什么是图像直方图从数学的角度来讲,直方图又称质量分布图,是一种统计报告图,由一系列高度不等的纵向条纹或线段表示数据分布的情况。 一般用横轴表示数据类型,纵轴表示分布情况。图像直方图是用以表示数字图像中亮度分布的直方图,标绘了图像中每个亮度值的像素数。这种直方图中,横坐标的左侧为纯黑、较暗的区域,而右侧...
2020-03-06 08:56:40
345
原创 Python+opencv学习记录8:边缘保留滤波(EPF)
文章目录1.高斯双边模糊1.1原理1.2代码解析2.均值迁移模糊2.1.原理2.2.代码解析完整代码1.高斯双边模糊1.1原理前文提到的高斯模糊只考虑了像素空间的分布,而没有考虑差异问题。高斯滤波在滤波时会将图像中各个颜色区域的边缘同区域本身一同模糊掉,而高斯双边滤波则是对各个区域的交界边缘有所保留。若想了解其更深的原理,可以参考以下两篇文章:http://www.360doc.com/...
2020-03-04 10:55:32
435
原创 Python+opencv学习记录7:高斯模糊
文章目录1.高斯模糊2.代码实现完整代码1.高斯模糊高斯模糊(英语:Gaussian Blur),通常用它来减少图像噪声以及降低细节层次。这种模糊技术生成的图像,其视觉效果就像是经过一个半透明的屏幕观察图像。在计算机视觉算法中,高斯模糊通常用于预处理阶段,降低高斯噪声,以增强图像在不同比例大小下的图像效果。若想更加细致地了解高斯模糊原理,可以参考http://www.ruanyifeng....
2020-03-03 10:35:13
557
原创 Python+opencv学习记录6:模糊操作
文章目录1.模糊操作基本原理1.1.均值模糊1.2.中值模糊1.3.自定义模糊2.相对应的代码2.1.均值模糊2.2.中值模糊2.3.自定义模糊完整代码1.模糊操作基本原理图像在采集、传输的过程中,因为人为或者系统的因素难免会产生噪声。这时候就需要对图像进行预处理降低噪声。图像模糊降噪的数学原理是图像的卷积操作。模糊操作:基于离散卷积,定义好每个卷积核,不同卷积核得到不同的卷积效果,模糊是卷...
2020-03-02 11:34:26
267
原创 Python+opencv学习记录5:ROI与泛洪填充
文章目录1.概念1.1.ROI1.2.泛洪填充算法2.代码实现2.1.ROI2.2.泛洪填充1.概念1.1.ROIROI(region of interest),感兴趣区域。机器视觉、图像处理中,从被处理的图像以方框、圆、椭圆、不规则多边形等方式勾勒出需要处理的区域,称为感兴趣区域,ROI。在图像处理领域,感兴趣区域(ROI) 是从图像中选择的一个图像区域,这个区域是你的图像分析所关注的重点...
2020-03-01 11:10:20
495
原创 Python+opencv学习记录4:像素运算
文章目录1.算术运算1.1像素加法运算1.2像素减法运算1.3像素除法运算1.4像素乘法运算1.5像素平均值运算1.6像素均值和方差运算2.逻辑运算2.1逻辑与运算2.2逻辑或运算2.3逻辑非运算3.调节图像亮度和对比度1.算术运算注:进行算术运算的两幅图的像素大小须一致我们可以从opencv解压出来的文件夹里找到两张图片,目录为opencv\sources\samples\data,里面的...
2020-02-29 11:14:06
445
原创 Python+opencv学习记录3:色彩空间
文章目录1、色彩空间的介绍1.1、什么是色彩空间1.2、常见的色彩空间1.2.1、RGB1.2.2、HSV1.2.3、HSI1.2.4、YCrCb1.2.5、YUV1.3、相应的API2、色彩空间的应用2.1、颜色的提取完整代码1、色彩空间的介绍1.1、什么是色彩空间所谓色彩空间,又称“色域”,即一定的色彩范围,这是一种色彩模型。sRGB、AdobeRGB、ProPhotoRGB、CMYK等...
2020-02-27 11:16:15
603
原创 Python+opencv学习记录2:Numpy数组操作
文章目录1、访问图像中的所有像素2、创建一张图像1、访问图像中的所有像素一个图像的像素数据=长×宽×通道,要获取相关信息,可以使用以下代码:def access_pixels(image): # 访问图片的所有像素 print(image.shape) # 显示图像的长、宽、通道 height = image.shape[0] width = image.sha...
2020-02-25 10:54:25
274
原创 Python+opencv学习记录1:软件的安装与测试
1、需要准备的软件 Python-3.6.4(32/64)位下载地址: pan.baidu.com/s/1FSIvt2-kmsLANMKnRyH8tw 密码: ds5h Pycharm下载: https://www.jetbrains.com/pycharm/download/#section=windows2、opencv库的安装 首先打开命令行,直接wi...
2020-02-24 09:40:55
233
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人