
opencv
文章平均质量分 82
OpenCV-Python 中文教程
这本书是来源于 OpenCV 的官方文档,内容全面,对各种的算法的描述简单易懂,而且不拘泥于长篇大论的数学推导,非常适合想使用OpenCV 解决实际问题的人,对他们来说具体的数学原理并不重要,重要是能解决实际问题。
越努力越幸运@
研究生
展开
-
对象检测-使用 Haar 分类器进行面部检测
使用 Haar 分类器进行面部检测目标 本节我们要学习: • 以 Haar 特征分类器为基础的面部检测技术 • 将面部检测扩展到眼部检测等。基础 以 Haar 特征分类器为基础的对象检测技术是一种非常有效的对象检测技术(2001 年 Paul_Viola 和 Michael_Jones 提出)。它是基于机器学习的,通过使用大量的正负样本图像训练得到一个 cascade_function,最后再用它来做对象检测。 现在我们来学习面部检测。开始时,算法需要大量的正样本图像(面部图像)和负样本原创 2022-07-26 09:02:16 · 440 阅读 · 0 评论 -
使用修补技术去除老照片中小的噪音和划痕
它要选取待修补像素周围的一个小的邻域,使用这个邻域内的归一化加权和更新待修复的像素值。对于靠近带修复点的像素点,靠近正常边界像素点和在轮廓上的像素点给予更高的权重。当一个像素被修复之后,使用快速行进算法(FMM)移动到下一个最近的像素。它首先沿着正常区域的边界向退化区域的前进(因为边界是连续的,所以退化区域非边界与正常区域的边界应该也是连续的)。我们要创建一个与输入图像大小相等的掩模图像,将待修复区域的像素设置为255(其他地方为0)。第三幅是使用第一个算法的结果,最后一副是使用第二个算法的结果。.....原创 2022-07-26 07:33:01 · 881 阅读 · 0 评论 -
学习使用非局部平均值去噪算法去除图像中的噪音-图像去噪
在这种情况下temporaWindowSize帧的图像会被用于去噪,中间的帧就是要去噪的帧。所以我们可以选取包含目标像素的一个小窗口,然后在图像中搜索相似的窗口,最后求取所有窗口的平均值,并用这个值取代目标像素的值。考虑图像中一个小的窗口(5x5),有很大可能图像中的其他区域也存在一个相似的窗口。在前面的章节中我们已经学习了很多图像平滑技术,比如高斯平滑,中值平滑等,当噪声比较小时这些技术的效果都是很好的。(假设是高斯噪声)。下面是结果的放大图,我们的输入图像中含有方差为25的噪声,下面是结果。...原创 2022-07-25 07:31:18 · 1606 阅读 · 0 评论 -
学习使用 OpenCV 中的函数 cv2.kmeans() 对数据进行分类
在本例中我的到的中心是60和207。标志的数目与测试数据的多少是相同的,每个数据都会被标记上“0”,“1”等。所以我们需要把图片数据变形成Mx3(M是图片中像素点的数目)的向量。聚类完成后,我们用聚类中心值替换与其同组的像素值,这样结果图片就只含有指定数目的颜色了。在本例中我们的测试数据适应50x2的向量,其中包含50个人的身高和体重。第一行包含两个元素,第一个是第一个人的身高,第二个是第一个人的体重。在前面的T恤例子中我们只考虑了身高,现在我们也把体重考虑进去,也就是两个特征。...原创 2022-07-24 10:48:04 · 1653 阅读 · 0 评论 -
学习 K 值聚类的概念以及它是如何工作的
肯定不能把每个大小的T恤都生产出来,所以他们把所有的人分为三组小,中,大,这三组要覆盖所有的人。我们可以使用K值聚类的方法将所有人分为3组,这个算法可以找到一个最好的分法,并能覆盖所有人。计算每个点到这两个重心点的距离,如果距离C1比较近就标记为0,如果距离C2比较近就标记为1。(如果有更多的重心点,可以标记为“2”,“3”等)重新计算所有蓝色点的重心,和所有红色点的重心,并以这两个点更新重心点的位置。在我们的例子中我们把属于0的标记为红色,属于1的标记为蓝色。...原创 2022-07-24 08:33:55 · 1388 阅读 · 0 评论 -
使用 SVM 进行手写数据 OCR
接下来我们要计算图像的HOG描述符,创建一个函数hog()。然后计算得到每个像素的梯度的方向和大小。将图像分为4个小的方块,对每一个小方块计算它们的朝向直方图(16个bin),使用梯度的大小做权重。4个小方块的4个向量就组成了这个图像的特征向量(包含64个成员)。在计算HOG前我们使用图片的二阶矩对其进行抗扭斜(deskew)处理。下图显示了对含有数字0的图片进行抗扭斜处理后的效果。本节我们还是要进行手写数据的OCR,但这次我们使用的是SVM而不是kNN。......原创 2022-07-23 19:13:55 · 769 阅读 · 0 评论 -
支持向量机SVM
有时我们找到的决定边界的边缘可能不是最大的但是错误分类是最少的。所以我们需要对我们的模型进行修正来找到一个更好的决定边界最大的边缘,最小的错误分类。不,只需要那些靠近边界的数据,如上图中一个蓝色的圆盘和两个红色的方块。例如,在一维空间中X类包含的数据点有(-3,3),O类包含的数据点有(-1,1)。这样X就变成了(-3,9)和(3,9)而O就变成了(-1,1)和(1,1)。所以根据低维的数据来计算它们的高维特征。对这组数据进行映射,得到的X为9,O为1,这时就可以使用线性分割了。...原创 2022-07-23 12:25:45 · 692 阅读 · 0 评论 -
使用 kNN 对手写数字 OCR
我们在将拆分后的每一个数字的图像重排成一行含有400个像素点的新图像。我们使用每个数字的前250个样本做训练数据,剩余的250个做测试数据。改善准确度的一个办法是提供更多的训练数据,尤其是判断错误的那些数字。为了避免每次运行程序都要准备和训练分类器,我们最好把它保留,这样在下次运行是时,只需要从文件中读取这些数据开始进行分类就可以了。由于我们现在使用灰度值(unint8)作为特征,在保存之前最好先把这些数据装换成np.uint8格式,这样就只需要占用1.1M的空间。...原创 2022-07-22 10:20:45 · 506 阅读 · 0 评论 -
机器学习-K 近邻(k-Nearest Neighbour )
我们可以把所有的这些对象看成是一个城镇中房子,而所有的房子分别属于蓝色和红色家族,而这个城镇就是所谓的特征空间。例如在一个2D的坐标空间中,每个数据都两个特征x坐标和y坐标,你可以在2D坐标空间中表示这些数据。下面就是kNN算法分类器的初始化,我们要传入一个训练数据集,以及与训练数据对应的分类来训练kNN分类器(构建搜索树)。一个方法就是查看他最近的邻居属于那个家族,从图像中我们知道最近的是红色三角家族。这说明我们的测试数据有3个邻居,他们都是蓝色,所以它被分为蓝色家族。...原创 2022-07-22 10:09:21 · 953 阅读 · 2 评论 -
光流的概念以及 Lucas-Kanade 光流法
由于目标对象或者摄像机的移动造成的图像对象在连续两帧图像中的移动被称为光流。它是一个2D向量场,可以用来显示一个点从第一帧图像到第二帧图像之间的移动。Lucas-Kanade法是计算一些特征点的光流(我们上面的例子使用的是Shi-Tomasi算法检测到的角点)。它会图像中的所有点的光流。下面的例子就是使用上面的算法计算稠密光流。OpenCV的官方示例中有一个更高级的稠密光流/samples/python2/opt_flow.py,去搞定它吧!上图显示了一个点在连续的五帧图像间的移动。...原创 2022-07-22 09:04:06 · 1509 阅读 · 0 评论 -
学习使用 Meanshift 和 Camshift 算法在视频中找到并跟踪目标对象
这时又可以找到新窗口内所有点的质心,大多数情况下还是不重合的,所以重复上面的操作将新窗口的中心移动到新的质心。你认真看上面的结果了吗?我们的窗口的大小是固定的,而汽车由远及近(在视觉上)是一个逐渐变大的过程,固定的窗口是不合适的。假设我们有一堆点(比如直方图反向投影得到的点),和一个小的圆形窗口,我们要完成的任务就是将这个窗口移动到最大灰度密度处(或者是点最多的地方)。与Meanshift基本一样,但是返回的结果是一个带旋转角度的矩形(这是我们的结果),以及这个矩形的参数(被用到下一次迭代过程中)。...原创 2022-07-21 12:24:15 · 403 阅读 · 0 评论 -
学习为立体图像制作深度地图
x和x’分别是图像中的点到3D空间中的点和到摄像机中心的距离。B是这两个摄像机之间的距离,f是摄像机的焦距。上边的等式告诉我们点的深度与x和x’的差成反比。所以根据这个等式我们就可以得到图像中所有点的深度图。这样就可以找到两幅图像中的匹配点了。如果同一场景有两幅图像的话我们在直觉上就可以获得图像的深度信息。下面是的这幅图和其中的数学公式证明我们的直觉是对的。通过调整numDisparities和blockSize的值,我们会得到更好的结果。下面的代码显示了构建深度图的简单过程。...原创 2022-07-21 10:19:25 · 847 阅读 · 0 评论 -
对极几何(Epipolar Geometry)
简单来说,基础矩阵F将一副图像中的点映射到另一幅图像中的线(极线)上。在我们使用针孔相机时,我们会丢失大量重要的信心,比如说图像的深度,或者说图像上的点和摄像机的距离,因这是一个从3D到2D的转换。如果只是用一台摄像机我们不可能知道3D空间中的X点到图像平面的距离,因为OX连线上的每个点投影到图像平面上的点都是相同的。从上面的示意图可以看出,右侧摄像机的中心O’投影到左侧图像平面的e点,这个点就被称为极点。从上图可以看出所有的极线都汇聚以图像外的一点,这个点就是极点。...原创 2022-07-21 07:14:40 · 992 阅读 · 0 评论 -
要学习使用 calib3D 模块在图像中创建 3D 效果-姿势估计
简单来说,我们在图像平面上找到了与3D空间中的点(3,0,0),(0,3,0),(0,0,3)相对应的点。所以,如果我们知道对象在空间中的姿势,我们就可以在图像中绘制一些2D的线条来产生3D的效果。所以X轴从(0,0,0)绘制到(3,0,0),Y轴也是。我们的问题是,在棋盘的第一个角点绘制3D坐标轴(X,Y,Z轴)。现在我们来创建一个函数draw,它的参数有棋盘上的角点(使用cv2.findChessboardCorners()得到)和要绘制的3D坐标轴上的点。...原创 2022-07-20 10:28:50 · 1082 阅读 · 0 评论 -
摄像机标定和 3D 重构
现在为了求X,Y的值,我们只需要传入这些点(0,0),(1,0),(2,0)…在这个例子中,我们的结果的单位就是棋盘(单个)方块的大小。但是如果我们知道单个方块的大小(加入说30mm),我们输入的值就可以是(0,0),(30,0),(60,0)…(在本例中我们不知道方块的大小,因为不是我们拍的,所以只能用前一种方法了)。重要的是在进行摄像机标定时我们要输入一组3D真实世界中的点以及与它们对应2D图像中的点。在读取下一帧图像之前要设置一定的间隔,这样我们就有足够的时间调整棋盘的方向。...原创 2022-07-20 09:54:07 · 1132 阅读 · 0 评论 -
OpenCV 中的背景减除方法
在x,y平面上一个像素就是一个像素没有分布,但是我们现在讲的背景建模是基于时间序列的,因此每一个像素点所在的位置在整个时间序列中就会有很多值,从而构成一个分布。如果你有一张背景(仅有背景不含前景)图像,比如没有顾客的房间,没有交通工具的道路等,那就好办了。但是在大多数情况下,我们没有这样的(背景)图像,所以我们需要从我们有的图像中提取背景。这个算法的一个特点是它为每一个像素选择一个合适数目的高斯分布。这是一种自适应的估计,新观察到的对象比旧的对象具有更高的权重,从而对光照变化产生适应。...原创 2022-07-19 20:59:34 · 2203 阅读 · 0 评论 -
光流的概念以及 Lucas-Kanade 光流法
函数将返回带有状态数的点,如果状态数是1,那说明在下一帧图像中找到了这个点(上一帧中角点),如果状态数是0,就说明没有在下一帧图像中找到这个点。从使用者的角度来看,想法很简单,我们取跟踪一些点,然后我们就会获得这些点的光流向量。我们可以使用图像金字塔的顶层,此时小的运动被移除,大的运动装换成了小的运动,现在再使用Lucas-Kanade算法,我们就会得到尺度空间上的光流。Lucas-Kanade法是计算一些特征点的光流(我们上面的例子使用的是Shi-Tomasi算法检测到的角点)。...原创 2022-07-18 09:18:31 · 758 阅读 · 0 评论 -
视频分析-使用 Meanshift 和 Camshift 算法在视频中找到并跟踪 目标对象
这时又可以找到新窗口内所有点的质心,大多数情况下还是不重合的,所以重复上面的操作将新窗口的中心移动到新的质心。你认真看上面的结果了吗?我们的窗口的大小是固定的,而汽车由远及近(在视觉上)是一个逐渐变大的过程,固定的窗口是不合适的。假设我们有一堆点(比如直方图反向投影得到的点),和一个小的圆形窗口,我们要完成的任务就是将这个窗口移动到最大灰度密度处(或者是点最多的地方)。与Meanshift基本一样,但是返回的结果是一个带旋转角度的矩形(这是我们的结果),以及这个矩形的参数(被用到下一次迭代过程中)。...原创 2022-07-18 08:28:46 · 375 阅读 · 0 评论 -
使用特征匹配和单应性查找对象
我们使用一个查询图像,在其中找到一些特征点(关键点),我们又在另一幅图像中也找到了一些特征点,最后对这两幅图像之间的特征点进行匹配。简单来说就是我们在一张杂乱的图像中找到了一个对象(的某些部分)的位置。这些信息足以帮助我们在目标图像中准确的找到(查询图像)对象。如果将这两幅图像中的特征点集传给这个函数,他就会找到这个对象的透视图变换。如果找到了足够的匹配,我们要提取两幅图像中匹配点的坐标。一旦我们找到3x3的变换矩阵,就可以使用它将查询图像的四个顶点(四个角)变换到目标图像中去了。...原创 2022-07-17 19:33:17 · 218 阅读 · 0 评论 -
在图像间进行特征匹配
如果前面使用的是BFMatcher.knnMatch(),现在我们可以使用函数cv2.drawMatchsKnn为每个关键点和它的k个最佳匹配点绘制匹配线。如果设置为True,匹配条件就会更加严格,只有到A中的第i个特征点与B中的第j个特征点距离最近,并且B中的第j个特征点到A中的第i个特征点也是最近(A中没有其他点到j的距离更近)时才会返回最佳匹配(i,j)。注释掉的值是文献中推荐使用的,但是它们并不适合所有情况,其他值的效果可能会更好。蛮力匹配器是很简单的。...原创 2022-07-17 07:24:00 · 1032 阅读 · 0 评论 -
ORB (Oriented FAST and Rotated BRIEF)
为了对steered_BRIEF算法使得特征的方差减小的弥补和减小数据间的相关性,用一个学习算法(learningmethod)选择二进制测试的一个子集。在计算开支,匹配效率以及更主要的是专利问题方面ORB算法是是SIFT和SURF算法的一个很好的替代品。所以我们在生成特征前,要把关键点领域的这个patch的坐标轴旋转到关键点的方向。为了进一步提高旋转不变性,要计算以角点为中心半径为r的圆形区域的矩,再根据矩计算除方向。对于描述符,ORB使用的是BRIEF描述符。......原创 2022-07-16 21:54:48 · 436 阅读 · 0 评论 -
BRIEF 算法的基础-BRIEF(Binary Robust Independent Elementary Features)
BRIEF(Binary Robust Independent Elementary Features)目标 本节 • 我们学习 BRIEF 算法的基础原理 我们知道 SIFT 算法使用的是 128 维的描述符。由于它是使用的浮点数,所以要使用 512 个字节。同样 SURF 算法最少使用 256 个字节(64 为维描述符)。创建一个包含上千个特征的向量需要消耗大量的内存,在嵌入式等资源有限的设备上这样是合适的。匹配时还会消耗更多的内存和时间。 但是在实际的匹配过程中如此多的维度是没有必要原创 2022-07-14 11:42:20 · 492 阅读 · 0 评论 -
角点检测的 FAST 算法
角点检测的 FAST 算法目标 • 理解 FAST 算法的基础 • 使用 OpenCV 中的 FAST 算法相关函数进行角点检测 原理 我们前面学习了几个特征检测器,它们大多数效果都很好。但是从实时处理的角度来看,这些算法都不够快。一个最好例子就是 SLAM(同步定位与地图构建),移动机器人,它们的计算资源非常有限。 为了解决这个问题,Edward_Rosten 和 Tom_Drummond 在 2006 年提出里 FAST 算法。我们下面将会对此算法进行一个简单的介绍。你可以参考原始原创 2022-07-14 10:30:41 · 821 阅读 · 0 评论 -
介绍 SURF(Speeded-Up Robust Features)
介绍 SURF(Speeded-Up Robust Features)目标 本节我们将要学习: • SUFR 的基础是什么? • OpenCV 中的 SURF 原理 在上一节中我们学习了使用 SIFT 算法进行关键点检测和描述。但是这种算法的执行速度比较慢,人们需要速度更快的算法。在 2006 年Bay,H.,Tuytelaars,T. 和 Van Gool,L 共同提出了 SURF(加速稳健特征)算法。跟它的名字一样,这是个算法是加速版的 SIFT。 在 SIFT 中,Lowe原创 2022-07-13 20:17:44 · 931 阅读 · 0 评论 -
介绍 SIFT(Scale-Invariant Feature Transform)
介绍 SIFT(Scale-Invariant Feature Transform)目标 • 学习 SIFT 算法的概念 • 学习在图像中查找 SIFT 关键点和描述符原理 在前面两节我们学习了一些角点检测技术,比如 Harris 等。它们具有旋转不变特性,即使图片发生了旋转,我们也能找到同样的角点。很明显即使图像发生旋转之后角点还是角点。那如果我们对图像进行缩放呢?角点可能就不再是角点了。以下图为例,在一副小图中使用一个小的窗口可以检测到一个角点,但是如果图像被放大,再使用同样的窗口就检测不原创 2022-07-13 09:00:12 · 528 阅读 · 0 评论 -
Shi-Tomasi 角点检测 & 适合于跟踪的图像特征
Shi-Tomasi 角点检测 & 适合于跟踪的图像特征目标 本节我们将要学习: • 另外一个角点检测技术:Shi-Tomasi 焦点检测 • 函数:cv2.goodFeatureToTrack()原理 上一节我们学习了 Harris 角点检测,后来 1994 年,J.Shi 和 C.Tomasi在他们的文章《Good_Features_to_Track》中对这个算法做了一个小小的修改,并得到了更好的结果。我们知道 Harris 角点检测的打分公式为: 但 Shi-Tomasi 使原创 2022-07-06 23:20:00 · 370 阅读 · 0 评论 -
图像特征提取与描述- Harris 角点检测
Harris 角点检测目标 • 理解 Harris 角点检测的概念 • 学习函数:cv2.cornerHarris(),cv2.cornerSubPix() 原理 在上一节我们已经知道了角点的一个特性:向任何方向移动变化都很大。Chris_Harris 和 Mike_Stephens 早在 1988 年的文章《A Combined Corner and Edge Detector》中就已经提出了焦点检测的方法,被称为Harris 角点检测。他把这个简单的想法转换成了数学形式。将窗口向各个原创 2022-07-06 23:08:46 · 403 阅读 · 0 评论 -
OpenCV-使用 GrabCut 算法进行交互式前景提取
使用 GrabCut 算法进行交互式前景提取目标 在本节中我们将要学习: • GrabCut 算法原理,使用 GrabCut 算法提取图像的前景 • 创建一个交互是程序完成前景提取 原理 算法是由微软剑桥研究院的 Carsten_Rother,Vladimir_Kolmogorov和 Andrew_Blake 在文章《GrabCut”: interactive foreground extraction using iterated graph cuts》中共同提出的。此算法在提取前原创 2022-07-05 22:05:39 · 594 阅读 · 0 评论 -
opencv-分水岭算法图像分割
分水岭算法图像分割目标 本节我们将要学习 • 使用分水岭算法基于掩模的图像分割 • 函数:cv2.watershed() 原理 任何一副灰度图像都可以被看成拓扑平面,灰度值高的区域可以被看成是山峰,灰度值低的区域可以被看成是山谷。我们向每一个山谷中灌不同颜色的水。随着水的位的升高,不同山谷的水就会相遇汇合,为了防止不同山谷的水汇合,我们需要在水汇合的地方构建起堤坝。不停的灌水,不停的构建堤坝知道所有的山峰都被水淹没。我们构建好的堤坝就是对图像的分割。这就是分水岭算法的背后哲理。你可以通原创 2022-07-04 23:07:14 · 710 阅读 · 0 评论 -
OpenCV-Hough 圆环变换
Hough 圆环变换目标 • 学习使用霍夫变换在图像中找圆形(环)。 • 学习函数:cv2.HoughCircles()。 原理 圆形的数学表达式为 (x-xcenter)2{{(x-{x}_{center})}^{2}}(x-xcenter)2+(y-ycenter)2{{(y-{y}_{center})}^{2}}(y-ycenter)2 = r2{{r}^{2}}r2,其中(xcenter{{x}_{center}}xcenter,ycenter{{y}_{center}}ycen原创 2022-07-04 22:54:21 · 282 阅读 · 0 评论 -
OpenCV-Hough 直线变换
Hough 直线变换目标 • 理解霍夫变换的概念 • 学习如何在一张图片中检测直线 • 学习函数:cv2.HoughLines(),cv2.HoughLinesP() 原理 霍夫变换在检测各种形状的的技术中非常流行,如果你要检测的形状可以用数学表达式写出,你就可以是使用霍夫变换检测它。及时要检测的形状存在一点破坏或者扭曲也可以使用。我们下面就看看如何使用霍夫变换检测直线。 一条直线可以用数学表达式 y = mx + c 或者 ρ = x cos θ + y sin θ 表示。ρ原创 2022-07-02 22:29:51 · 383 阅读 · 0 评论 -
opencv-模板匹配
模板匹配目标 在本节我们要学习: 1. 使用模板匹配在一幅图像中查找目标 2. 函数:cv2.matchTemplate(),cv2.minMaxLoc()原理 模板匹配是用来在一副大图中搜寻查找模版图像位置的方法。OpenCV 为我们提供了函数:cv2.matchTemplate()。和 2D 卷积一样,它也是用模板图像在输入图像(大图)上滑动,并在每一个位置对模板图像和与其对应的输入图像的子区域进行比较。OpenCV 提供了几种不同的比较方法(细节请看文档)。返回的结果是一个灰度图像,每原创 2022-07-02 17:03:55 · 1056 阅读 · 0 评论 -
opencv-图像变换:傅里叶变换
图像变换傅里叶变换目标 本小节我们将要学习: • 使用 OpenCV 对图像进行傅里叶变换 • 使用 Numpy 中 FFT(快速傅里叶变换)函数 • 傅里叶变换的一些用处 • 我们将要学习的函数有:cv2.dft(),cv2.idft() 等原理 傅里叶变换经常被用来分析不同滤波器的频率特性。我们可以使用 2D 离散傅里叶变换 (DFT) 分析图像的频域特性。实现 DFT 的一个快速算法被称为快速傅里叶变换(FFT)。关于傅里叶变换的细节知识可以在任意一本图像处理或信号处理的书中原创 2022-07-01 09:14:47 · 1450 阅读 · 0 评论 -
OpenCV-直方图反向投影
首先我们要为一张包含我们要查找目标的图像创建直方图(在我们的示例中,我们要查找的是草地,其他的都不要)。接着我们再把这个颜色直方图投影到输入图像中寻找我们的目标,也就是找到输入图像中的每一个像素点的像素值在直方图中对应的概率,这样我们就得到一个概率图像,最后设置适当的阈值对概率图像进行二值化,就这么简单。例如B(x,y)=R[h(x,y),s(x,y)],其中h为点(x,y)处的hue值,s为点(x,y)处的saturation值。其中的一个参数是我们要查找目标的直方图。...原创 2022-07-01 08:22:32 · 449 阅读 · 0 评论 -
2D 直方图
2D 直方图目标 本节我们会学习如何绘制 2D 直方图,我们会在下一节中使用到它。介绍 在前面的部分我们介绍了如何绘制一维直方图,之所以称为一维,是因为我们只考虑了图像的一个特征:灰度值。但是在 2D 直方图中我们就要考虑两个图像特征。对于彩色图像的直方图通常情况下我们需要考虑每个的颜色(Hue)和饱和度(Saturation)。根据这两个特征绘制 2D 直方图。 OpenCV 的官方文档中包含一个创建彩色直方图的例子。本节就是要和大家一起来学习如何绘制颜色直方图,这会对我们下一节学习直方图投影原创 2022-06-30 21:52:46 · 1040 阅读 · 0 评论 -
直方图均衡化
直方图均衡化目标 • 本小节我们要学习直方图均衡化的概念,以及如何使用它来改善图片的对比。 原理 想象一下如果一副图像中的大多是像素点的像素值都集中在一个像素值范围之内会怎样呢?例如,如果一幅图片整体很亮,那所有的像素值应该都会很高。但是一副高质量的图像的像素值分布应该很广泛。所以你应该把它的直方图做一个横向拉伸(如下图),这就是直方图均衡化要做的事情。通常情况下这种操作会改善图像的对比度。 推荐你去读读维基百科中关于直方图均衡化的条目。其中的解释非常给力,读完之后相信你就会对整个过程有一原创 2022-06-30 19:14:13 · 1051 阅读 · 0 评论 -
直方图的计算,绘制与分析
直方图的计算,绘制与分析目标 • 使用 OpenCV 或 Numpy 函数计算直方图 • 使用 Opencv 或者 Matplotlib 函数绘制直方图 • 将要学习的函数有:cv2.calcHist(),np.histogram() 原理 什么是直方图呢?通过直方图你可以对整幅图像的灰度分布有一个整体的了解。直方图的 x 轴是灰度值(0 到 255),y 轴是图片中具有同一个灰度值的点的数目。 直方图其实就是对图像的另一种解释。一下图为例,通过直方图我们可以对图像的对比度,亮度,灰原创 2022-06-29 22:48:07 · 2382 阅读 · 0 评论 -
OpenCV 中的轮廓-轮廓的层次结构
这样我们就可以确定一个轮廓与其他轮廓是怎样连接的,比如它是不是某个轮廓的子轮廓,或者是父轮廓。而对象内部中空洞的轮廓为第2级组织结构,空洞中的任何对象的轮廓又是第1级组织结构。所以数组是[2,-1,-1,0]。与前面一样,轮廓1的Previous为轮廓0,轮廓2的Previous为轮廓1。子为4,没有父轮廓,所以数组是[5,0,4,-1]没有子,父轮廓为0,所以数组是[-1,1,-1,0]没有Previous,没有子,父轮廓为3,所以数组是[-1,-1,-1,3]...原创 2022-06-29 12:13:36 · 1250 阅读 · 0 评论 -
OpenCV 中的轮廓-轮廓:更多函数
轮廓:更多函数目标 我们要学习• 凸缺陷,以及如何找凸缺陷• 找某一点到一个多边形的最短距离• 不同形状的匹配原理与代码凸缺陷 前面我们已经学习了轮廓的凸包,对象上的任何凹陷都被成为凸缺陷。 OpenCV 中有一个函数 cv.convexityDefect() 可以帮助我们找到凸缺陷。函数调用如下:它会返回一个数组,其中每一行包含的值是 [起点,终点,最远的点,到最远点的近似距离]。我们可以在一张图上显示它。我们将起点和终点用一条绿线连接,在最远点画一个圆圈,要记住的是返回结果的前三原创 2022-06-28 23:10:27 · 225 阅读 · 0 评论 -
OpenCV 中的轮廓-轮廓的性质
轮廓的性质 本小节我们将要学习提取一些经常使用的对象特征。你可以在Matlab regionprops documentation 更多的图像特征。 长宽比 边界矩形的宽高比 Extent轮廓面积与边界矩形面积的比。Solidity轮廓面积与凸包面积的比。Equivalent Diameter与轮廓面积相等的圆形的直径方向对象的方向,下面的方法还会返回长轴和短轴的长度掩模和像素点有时我们需要构成对象的所有像素点,我们可以这样做:这里我们是用来两种方法,第一种方法使用原创 2022-06-28 22:57:38 · 479 阅读 · 0 评论