![](https://img-blog.csdnimg.cn/20190927151124774.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
opencv-python
文章平均质量分 83
学习opencv
和风细动帘帷暖
这个作者很懒,什么都没留下…
展开
-
8.2.2. 在手写数据集上使用支持向量机进行OCR
在本章。原创 2023-04-28 21:40:30 · 101 阅读 · 0 评论 -
8.2.1. 理解支持向量机
在本章。原创 2023-04-28 21:39:05 · 50 阅读 · 0 评论 -
8.1. K近邻
我们可以把所有的这些对象看成是一个城镇中房子,而所有的房子分别属于蓝色和红色家族,而这个城镇就是所谓的特征空间。然后我们根据两个家族的权重和来判断新房子的归属,谁的权重大就属于谁。一个方法就是查看他最近的邻居属于那个家族,从图像中我们知道最近的是红色三角家族。下面就是 kNN 算法分类器的初始化,我们要传入一个训练数据集,以及与训练数据对应的分类来训练 kNN 分类器(构建搜索树)。你可能会得到一个与上面类似的图形,但不会完全一样,因为你使用了随机数产生器,每次你运行代码都会得到不同的结果。原创 2023-04-28 21:37:17 · 56 阅读 · 0 评论 -
7.4. 立体图像的深度图
x 和 x’ 分别是图像中的点到 3D 空间中的点和到摄像机中心的距离。B 是这两个摄像机之间的距离,f 是摄像机的焦距。上边的等式告诉我们点的深度与x 和 x’ 的差成反比。在上一节中我们学习了对极约束的基本概念和相关术语。如果同一场景有两幅图像的话我们在直觉上就可以获得图像的深度信息。下面是的这幅图和其中的数学公式证明我们的直觉是对的。这样就可以找到两幅图像中的匹配点了。通过调整numDisparities和blockSize的值,你可以获得更好的结果。下面的代码片段显示了创建视差图的简单过程。原创 2023-04-28 21:36:46 · 108 阅读 · 0 评论 -
7.3. 对极几何
简单来说,基础矩阵 F 将一副图像中的点映射到另一幅图像中的线(极线)上。我们的眼睛以类似的方式工作,我们使用两个相机(两只眼睛)来判断物体的距离,称为立体视觉。它应该在这个一维直线的某个地方(想象一下,要找到其他图像中的匹配点,你不需要搜索整个图像,只需沿着极线搜索。如果我们仅使用左侧相机,则无法找到与图像中的点x对应的3D点,因为线OX上的每个点都投影到图像平面上的相同点。从上面给出的设置中,可以看到右侧摄像机O’的投影在该点的左侧图像上看到,例如。所以在本小节中,我们的重点就是寻找极线和极点。原创 2023-04-28 21:36:31 · 104 阅读 · 0 评论 -
7.2. 姿势估计
简单来说,我们在图像平面上找到了与 3D 空间中的点(3,0,0),(0,3,0),(0,0,3) 相对应的点。所以,如果我们知道对象在空间中的姿态,我们就可以在图像中绘制一些 2D 的线条来产生 3D 的效果。然后与前面的情况一样,我们创建终止标准,对象点(棋盘中的角点的3D点)和轴点。轴点是3D空间中用于绘制轴的点。所以我们的X轴是从(0,0,0)到(3,0,0)绘制的,同样。对于Z轴,它从(0,0,0)绘制到(0,0,-3)。我们的问题是,在棋盘的第一个角点绘制 3D 坐标轴(X,Y,Z 轴)。原创 2023-04-27 22:02:37 · 40 阅读 · 0 评论 -
7.1. 相机校准
现在为了求 X,Y 的值,我们只需要传入这些点(0,0),(1,0),(2,0)…在这个例子中,我们的结果的单位就是棋盘(单个)方块的大小。但是如果我们知道单个方块的大小(加入说 30mm),我们输入的值就可以是(0,0),(30,0),(60,0)…(在本例中我们不知道方块的大小,因为不是我们拍的,所以只能用前一种方法了)。重要的是在进行摄像机标定时我们要输入一组 3D 真实世界中的点以及与它们对应 2D 图像中的点。在读取下一帧图像之前要设置一定的间隔,这样我们就有足够的时间调整棋盘的方向。原创 2023-04-27 22:01:36 · 198 阅读 · 0 评论 -
6.3. 背景差分法
混合的权重表示这些颜色停留在场景中的时间比例,背景颜色是那些保持更长时间和更静态的颜色。如果你有一张背景图像,比如没有顾客的房间,没有交通工具的道路等,我们只需要在新的图像中减去背景就可以得到前景对象了。但是在大多数情况下,我们没有这样的(背景)图像,所以我们需要从我们有的图像中提取背景。如果图像中的交通工具还有影子的话,那这个工作就更难了,因为影子也在移动,仅仅使用背景差分法会把影子也当成前景,这样就有点麻烦了。这是一种自适应的估计,新观察到的对象比旧的对象具有更高的权重,从而对光照变化产生适应。原创 2023-04-27 21:58:02 · 496 阅读 · 0 评论 -
6.2. 光流
OpenCV 还提供了一种计算稠密光流的方法,它会计算图像中的所有点的光流。图像中的一些特征点甚至在丢失以后,光流还会找到一个预期相似的点。从使用者的角度来看,想法很简单,我们去跟踪一些点,然后我们就会获得这些点的光流向量。直到现在我们处理的都是很小的运动。函数将返回带有状态数的点,如果状态数是 1,那说明在下一帧图像中找到了这个点(上一帧中角点),如果状态数是 0,就说明没有在下一帧图像中找到这个点。这 9 个点的光流方程,用它们组成一个具有两个未知数 9 个等式的方程组,这是一个约束条件过多的方程组。原创 2023-04-27 21:56:55 · 78 阅读 · 0 评论 -
6.1. Meanshift和Camshift
初始窗口是蓝色的“C1”,它的圆心为蓝色方框“C1_o”,而窗口中所有点质心却是“C1_r”(小的蓝色圆圈),很明显圆心和点的质心没有重合。这时又可以找到新窗口内所有点的质心,大多数情况下还是不重合的,所以重复上面的操作:将新窗口的中心移动到新的质心。这里面有一个问题,我们的窗口的大小是固定的,而汽车由远及近(在视觉上)是一个逐渐变大的过程,固定窗口是不合适的。假设有一堆点(比如直方图反向投影得到的点),和一个小的窗口(可能是一个圆形窗口),然后将这个窗口移动到最大像素密度处(点最多的地方)。原创 2023-04-26 20:00:42 · 79 阅读 · 0 评论 -
5.10. 特征匹配结合单应性去查找对象
如果将这两幅图像中的特征点集传给这个函数,他就会找到这个对象的透视图变换。我们使用一个查询图像,在其中找到一些特征点(关键点),我们又在另一幅图像中也找到了一些特征点,最后对这两幅图像之间的特征点进行匹配。简单来说就是:我们在一张杂乱的图像中找到了一个对象(的某些部分)的位置。如果找到了足够的匹配,我们要提取两幅图像中匹配点的坐标。一旦我们找到 3x3 的变换矩阵,就可以使用它将查询图像的四个顶点(四个角)变换到目标图像中去了。首先,像往常一样,让我们在图像中找到SIFT特征并应用比率测试来找到最佳匹配。原创 2023-04-26 19:59:35 · 55 阅读 · 0 评论 -
5.9. 特征匹配
它需要两个可选的参数,第一个是normType,它指定要使用的距离测量,默认情况下,它是cv.NORM_L2,它适用于SIFT,SURF等(cv.NORM_L1也在那里)。对于基于二进制字符串的描述符,如ORB,BRIEF,BRISK等,应使用cv.NORM_HAMMING,它使用汉明距离作为度量。如果为真,则Matcher仅返回具有值(i,j)的那些匹配,使得集合A中的第i个描述符具有集合B中的第j个描述符作为最佳匹配,反之亦然。在这里,我们将看到一个关于如何匹配两个图像之间的特征的简单示例。原创 2023-04-26 19:59:00 · 322 阅读 · 0 评论 -
5.8. ORB (Oriented FAST and Rotated BRIEF)
这个算法由Ethan Rublee,Vincent Rabaud,Kurt Konolige和Gary R. Bradski在他们的论文ORB中提出:2011年是SIFT或SURF的有效替代方案。为了解决所有这些问题,ORB在所有可能的二进制测试中运行一个贪婪的搜索,以找到具有高方差和意味着接近0.5的那些,以及不相关的。结果称为rBRIEF。为了改善旋转不变性,用x和y计算矩,该x和y应该在半径为r的圆形区域中,其中r是贴片的大小。处的n个二进制测试的任何特征集,定义2×n矩阵,其包含这些像素的坐标。原创 2023-04-26 19:58:53 · 59 阅读 · 0 评论 -
5.7. BRIEF (Binary Robust Independent Elementary Features)
但是在实际的匹配过程中如此多的维度是没有必要的。汉明距离的计算只需要进行 XOR 位运算以及位计数,这种计算很适合在现代的CPU 上进行。创建一个包含上千个特征的向量需要消耗大量的内存,在嵌入式等资源有限的设备上这样是不可行的。非常重要的一点是:BRIEF 是一种特征描述符,它不提供查找特征的方法。OpenCV 对这些都提供了支持,但在默认情况下是 256(OpenC 是使用字节表示它们的,所以这些值分别对应与 16,32,64)。这种算法使用的是已经平滑后的图像,它会按照一种特定的方式选取一组像素点对。原创 2023-04-26 19:58:22 · 61 阅读 · 0 评论 -
5.6. 用于角点检测的FAST算法
FAST 算法比其它角点检测算法都快。但是在噪声很高时不够稳定,这是由阈值决定的。原创 2023-04-26 19:57:27 · 97 阅读 · 0 评论 -
5.5. SURF (Speeded-Up Robust Features)简介
这样做实际就是对图像进行梯度运算,但是利用积分图像,可以提高计算图像梯度的效率,为了求取主方向值,需哟啊设计一个以方向为中心,张角为 60 度的扇形滑动窗口,以步长为 0.2 弧度左右旋转这个滑动窗口,并对窗口内的图像 Haar 小波的响应值进行累加。这种最小的信息允许更快的匹配,而不会降低描述符的性能。在一个矩形的区域内,以特征点为中心,沿主方向将 20s * 20s 的图像划分成 4 * 4 个子块,每个子块利用尺寸 2s 的 Haar 小波模版进行响应计算,然后对响应值进行统计,组成向量。原创 2023-04-26 19:56:55 · 233 阅读 · 0 评论 -
5.4. SIFT(Scale-Invariant Feature Transform)简介
例如,检查下面的简单图像。对于图像中的一个像素点而言,它需要与自己周围的 8 邻域,以及尺度空间中上下两层中的相邻的 18(2x9)个点相比。返回的关键点是一个带有很多不同属性的特殊结构体,这些属性中包含它的坐标(x,y),有意义的邻域大小,确定其方向的角度、指定关键点强度的响应等。该算法的作者在文章中给出了 SIFT 参数的经验值:octaves=4(通过降低采样从而减小图像尺寸,构成尺寸减小的图像金字塔,尺度空间为 5,也就是每个尺寸使用 5 个不同方差的高斯核进行卷积,初始方差是 1.6,原创 2023-04-26 19:56:43 · 225 阅读 · 0 评论 -
5.3. Shi-Tomasi角点检测和特征追踪
它通过Shi-Tomasi方法(或Harris角点检测,如果你指定它)在图像中找到N个最强角。然后指定质量等级,该等级是0-1之间的值,表示低于每个人被拒绝的角点的最低质量。1994年晚些时候,J.Shi和C.Tomasi在他们的论文《Good Features to Track》中做了一个小修改,与Harris角点检测相比显示出更好的结果。利用所有这些信息,该函数可以在图像中找到角点。低于质量水平的所有角点都被拒绝。然后功能占据第一个最强的角点,抛弃最小距离范围内的所有角点并返回N个最强的角点。原创 2023-04-26 19:55:59 · 77 阅读 · 0 评论 -
5.2. Harris角点检测
Chris_Harris 和 Mike_Stephens 早在 1988 年的文章《A CombinedCorner and Edge Detector》中就已经提出了焦点检测的方法,被称为Harris 角点检测。然后我们传递这些角的质心(角点处可能有一堆像素,我们采用它们的质心)来细化它们。在此之后,他们创建了一个分数,基本上是一个等式,它将确定一个窗口是否可以包含一个角点。窗口函数可以是正常的矩形窗口也可以是对每一个像素给予不同权重的高斯窗口。因此,这些特征值的值决定区域是角点,边缘还是平坦。原创 2023-04-26 19:55:25 · 131 阅读 · 0 评论 -
5.1. 了解特征
我们用一个区域围绕这个特征,我们用自己的话解释它,比如“上部是蓝天,下部是建筑物的区域,那个建筑物上有玻璃等”,你在另一个地方寻找相同的区域图片。获得这些功能及其描述后,你可以在所有图像中找到相同的功能并对齐它们,将它们拼接在一起或做任何你想做的事情。我们在图像中搜索这些特征,找到它们,在其他图像中查找相同的特征并拼凑它们。因此,与平坦区域相比,边缘是更好的特征,但是不够好(用于比较边缘的连续性在拼图中是好的)。因此,在本单元中,我们正在寻找OpenCV中的不同算法来查找功能,描述功能,匹配它们等。原创 2023-04-25 21:24:50 · 219 阅读 · 0 评论 -
4.16. 基于GrabCut算法的交互式前景提取
在新的掩模图像中,像素将被标记为表示背景/前景的四个标记,如上所述。因此,我们修改掩模,使得所有0像素和2像素都被置为0(即背景),并且所有1像素和3像素被置为1(即前景像素)。笔划基本上说“嘿,这个区域应该是前景,你标记它的背景,在下一次迭代中纠正它”或它的背景相反。在画中使用画笔工具,我在这个新图层上标记了带有黑色的白色和不需要的背景(如徽标,地面等)的前景(头发,鞋子,球等)。然后在OpenCV中加载该掩模图像,编辑我们在新添加的掩模图像中使用相应值的原始掩模图像。哎呀,梅西的头发不见了。原创 2023-04-25 21:24:20 · 81 阅读 · 0 评论 -
4.15. 基于分水岭算法的图像分割
因此,OpenCV实现了一个基于标记的分水岭算法,你可以在其中指定哪些是要合并的谷点,哪些是不合并的。用一种颜色(或强度)标记我们确定为前景或对象的区域,用另一种颜色标记我们确定为背景或非对象的区域,最后标记我们不确定的区域,用0标记它。然后我们的标记将使用我们给出的标签进行更新,对象的边界将具有-1的值。随着水的上升,取决于附近的峰值(梯度),来自不同山谷的水,明显具有不同的颜色将开始融合。我们确切知道的区域(无论是前景还是背景)都标有任何正整数,但不同的整数,我们不确定的区域只是保留为零。原创 2023-04-25 21:23:24 · 295 阅读 · 0 评论 -
4.14. 霍夫圆变换
是圆的中心,r是圆的半径。从等式中,我们可以看到我们有3个参数,因此我们需要一个用于霍夫变换的3D累加器,这将非常无效。因此,OpenCV使用更棘手的方法,Hough Gradient Method,它使用边缘的梯度信息。我们在这里使用的函数是`cv.HoughCircles()。它有很多论据,在文档中有很好的解释。所以我们直接转到代码。原创 2023-04-25 21:23:16 · 32 阅读 · 0 评论 -
4.13. 霍夫线变换
因此,如果你在累加器中搜索最大投票数,则会得到值(50,90),表示此图像中距离原点和角度为90度的距离为50。在霍夫变换中,你可以看到即使对于具有两个参数的行,也需要大量计算。如果它超过原点,而不是采用大于180的角度,则角度小于180,并且rho被认为是否定的。霍夫变换是一种流行的检测形状的技术,如果你可以用数学形式表示形状的话。增加与你获得的(rho,theta)对应的单元格中的值。最好的是,它直接返回行的两个端点。在前面的例子中,你只得到了行的参数,你必须找到所有的点。你知道它的(x,y)值。原创 2023-04-25 08:58:19 · 40 阅读 · 0 评论 -
4.12. 模板匹配
在上一节中,我们搜索了梅西的脸的图像,在图像中只出现了一次。在这个例子中,我们将使用著名游戏马里奥的截图,我们将在其中找到硬币。它只是在输入图像上滑动模板图像(如在2D卷积中),并比较模板图像下的输入图像的模板和补丁。它返回一个灰度图像,其中每个像素表示该像素的邻域与模板匹配的程度。如果输入图像的大小(WxH)且模板图像的大小(wxh),则输出图像的大小为(W-w + 1,H-h + 1)。将其作为矩形的左上角,并将(w,h)作为矩形的宽度和高度。在这里,作为一个例子,我们将在他的照片中搜索梅西的脸。原创 2023-04-25 08:58:24 · 72 阅读 · 0 评论 -
4.11.1 傅里叶变换
因此,如果你担心代码的性能,可以在找到DFT之前将数组的大小修改为任何最佳大小(通过填充零)。,我们可以说f是信号的频率,如果采用其频域,我们可以看到f处的尖峰。如果对信号进行采样以形成离散信号,则我们得到相同的频域,但在[-π,π]或[0,2π](或对于N点DFT的[0,N])范围内是周期性的。如果你仔细观察结果,特别是JET颜色的最后一个图像,你可以看到一些文物(我用红色箭头标记的一个实例)。在之前的会话中,我们创建了一个HPF,这次我们将看到如何去除图像中的高频内容,即我们将LPF应用于图像。原创 2023-04-24 21:00:59 · 110 阅读 · 0 评论 -
4.10.4. 反投影直方图
我们创建一个图像的直方图,其中包含我们感兴趣的对象(在我们的例子中是地面、离开玩家和其他东西)。与灰度直方图相比,颜色直方图更受欢迎,因为与灰度强度相比,对象的颜色是一种更好的定义对象的方法。然后我们将这个直方图“向后投射”到我们需要找到目标的测试图像上,换句话说,我们计算出属于地面的每个像素的概率并显示出来。它用于图像分割或查找图像中感兴趣的对象。在更简单的世界中,输出的图像将使我们感兴趣的对象与其余部分相比有更多的白色。它的一个参数是直方图,它是对象的直方图,我们必须找到它。下面是我使用的一个例子。原创 2023-04-24 21:00:24 · 33 阅读 · 0 评论 -
4.10.3. 直方图3:2D直方图
我们学习计算并绘制了一维直方图。它之所以被称为一维,是因为我们只考虑一个特征,即像素的灰度强度值。但在二维直方图中,需要考虑两个特征。通常,它用于查找颜色直方图,其中两个特征是每个像素的色调值和饱和度值。有一个python样本(samples / python / color_histogram.py)已经用于查找颜色直方图。我们将尝试了解如何创建这样的颜色直方图,它将有助于理解直方图反投影等其他主题。原创 2023-04-24 20:59:50 · 71 阅读 · 0 评论 -
4.10.2 直方图2:均衡直方图
另一个重要特征是,即使图像是较暗的图像(而不是我们使用的更亮的图像),在均衡后我们将得到几乎与我们相同的图像。但是,良好的图像将具有来自图像的所有区域的像素。所以你需要将这个直方图拉伸到两端(如下图所示,来自维基百科),这就是直方图均衡所做的,通常可以改善图像的对比度。但比较两个图像中的雕像的脸。这是因为它的直方图并不局限于特定区域,正如我们在之前的案例中看到的那样(尝试绘制输入图像的直方图,你将获得更多的直觉)。我们需要全谱,为此我们需要一个转换函数,它将较亮区域中的输入像素映射到整个区域中的输出像素。原创 2023-04-24 20:59:14 · 102 阅读 · 0 评论 -
4.10.1 直方图1:查找,绘画,分析
上面的直方图显示了每个像素值的像素数,即从0到255.即你需要256个值来显示上面的直方图。在第一种情况下,bin的数量是256(每个像素一个),而在第二种情况下,它只有16. BINS由OpenCV docs中的术语histSize表示。从直方图中,你可以看到暗区域不仅仅是更亮的区域,中间色调的数量(中间区域的像素值,比如大约127)非常少。通过查看图像的直方图,你可以直观了解该图像的对比度,亮度,强度分布等。来查找完整图像的直方图。在直方图中,蓝线显示完整图像的直方图,而绿线显示屏蔽区域的直方图。原创 2023-04-24 20:58:40 · 68 阅读 · 0 评论 -
4.9.5. 轮廓:层次结构
通常我们使用cv.findContours()函数来检测图像中的对象,对吧?有时对象位于不同的位置。但在某些情况下,某些形状在其他形状内。就像嵌套的数字一样。在这种情况下,我们将外部一个称为父项,将内部项称为子项。这样,图像中的轮廓彼此之间存在某种关系。我们可以指定一个轮廓如何相互连接,例如,它是某个其他轮廓的子项,还是父项等。这种关系的表示称为层次结构。考虑下面的示例图片:在这张图片中,有一些形状,我从0-5编号。图2和2a表示最外侧盒子的外部和内部轮廓。这里,轮廓0,1,2是外部或最外部的。原创 2023-04-24 20:57:50 · 90 阅读 · 0 评论 -
4.9.4. 轮廓:更多函数
它返回一个数组,其中每一行包含这些值 - [起点,终点,最远点,到最远点的近似距离]。请记住,返回的前三个值是cnt的索引。OpenCV附带了一个函数cv.matchShapes(),它使我们能够比较两个形状或两个轮廓,并返回一个显示相似性的度量。结果越小,匹配就越好。如果为False,则查找该点是在内部还是外部或在轮廓上(它分别返回+1,-1,0)。当点在轮廓外时返回负值,当点在内部时返回正值,如果点在轮廓上则返回零。OpenCV附带了一个现成的函数来查找它,cv.convexityDefects()。原创 2023-04-24 20:57:05 · 33 阅读 · 0 评论 -
4.9.3. 轮廓属性
这里,两个方法,一个使用Numpy函数,另一个使用OpenCV函数(最后一个注释行)给出相同的方法。结果也相同,但略有不同。在这里,我们可以找到对象的平均颜色。或者它可以是灰度模式下物体的平均强度。(x,y)**格式给出坐标。在某些情况下,我们可能需要包含该对象的所有点。方向是对象定向的角度。极值点表示对象的最顶部,最底部,最右侧和最左侧的点。Solidity是轮廓区域与其凸包区域的比率。等效直径是圆的直径,其面积与轮廓面积相同。它是对象的边界矩形的宽度与高度的比。它是轮廓区域与边界矩形区域的比。原创 2023-04-24 20:56:34 · 45 阅读 · 0 评论 -
4.9.2. 轮廓特征
首先,我发现它的轮廓为cnt。例如,检查第一个值:cnt [129] = [[234,202]],它与第一个结果相同(对于其他结果,依此类推)。它返回一个Box2D结构,其中包含以下detals - (center(x,y),(width,height),rotation of rotation)。要理解这一点,可以假设你试图在图像中找到一个正方形,但是由于图像中的一些问题,你没有得到一个完美的正方形,而是一个“坏形状”(如下图第一张图所示)。图像的矩可帮助你计算某些特征,如对象的质心,对象的面积等特征。原创 2023-04-24 20:55:40 · 54 阅读 · 0 评论 -
4.9.1. 轮廓:入门
轮廓可以简单地解释为连接所有具有相同的颜色或强度的连续点(沿着边界)的曲线。轮廓是形状分析和物体检测和识别的很有用的工具。为了更好的准确性,使用二进制图像,因此,在找到轮廓之前,应用阈值或canny边缘检测。从OpenCV 3.2开始,findContours()不再修改源图像,而是将修改后的图像作为三个返回参数中的第一个返回。在OpenCV中,找到轮廓就像从黑色背景中找到白色物体。所以请记住,要找到的对象应该是白色,背景应该是黑色。在。原创 2023-04-23 20:59:48 · 47 阅读 · 0 评论 -
4.8. 图像金字塔
例如,在搜索图像中的某些内容时,如脸部,我们不确定该对象在所述图像中的大小。这些具有不同分辨率的图像被称为图像金字塔(因为当它们保持在堆叠中,底部具有最高分辨率图像而顶部具有最低分辨率图像时,它看起来像金字塔)。金字塔的一个应用是图像混合。例如,在图像拼接中,你需要将两个图像堆叠在一起,但由于图像之间的不连续性,它可能看起来不太好。在这种情况下,与金字塔混合的图像可以让你无缝混合,而不会在图像中留下太多数据。拉普拉斯金字塔中的一个层次由高斯金字塔中的该层次与高斯金字塔中的上层的扩展版本之间的差异形成。原创 2023-04-23 20:59:18 · 56 阅读 · 0 评论 -
4.7. Canny边缘检测
这个阶段决定哪些边缘都是边缘,哪些边缘不是边缘。强度梯度大于maxVal的任何边缘肯定是边缘,而minVal以下的边缘肯定是非边缘的,因此被丢弃。虽然边C低于maxVal,但它连接到边A,因此也被视为有效边,我们得到完整的曲线。但边缘B虽然高于minVal并且与边缘C的区域相同,但它没有连接到任何“可靠边缘”,因此被丢弃。在获得梯度的大小和方向之后,完成图像的全扫描以去除可能不构成边缘的任何不需要的像素。Canny边缘检测是一种流行的边缘检测算法,它是由John F. Canny开发的。原创 2023-04-23 20:59:06 · 76 阅读 · 0 评论 -
4.6. 图形梯度
你可以指定要采用的导数的方向,垂直或水平(yorder和xorder),你还可以通过参数ksize指定卷积核的大小。在我们的上一个示例中,输出数据类型为cv.CV_8U或np.uint8,但是这有一个小问题,将黑到白转换视为正斜率(它具有正值),而将白到黑转换视为负斜率(它具有负值)。如果要检测两个边,更好的选择是将输出数据类型保持为某些更高的形式,如cv.CV_16S,cv.CV_64F等,取其绝对值,然后转换回cv.CV_8U。下面的代码显示了单个图表中的所有运算符,所有卷积核都是5x5大小。原创 2023-04-23 20:58:17 · 43 阅读 · 0 评论 -
4.5. 形态变换
它需要两个输入参数,一个是我们的原始图像,第二个是称为结构元素或核,它决定了操作的性质。卷积核在图像中滑动(如在2D卷积中),只有当卷积核下的所有像素都是1时,原始图像中的像素(1或0)才会被认为是1,否则它会被腐蚀(变为零)。所以腐蚀作用后,边界附近的所有像素都将被丢弃,具体取决于卷积核的大小。它有助于消除小的白噪声(正如我们在色彩空间章节中看到的那样),或者分离两个连接的对象等。在这里,作为一个例子,我将使用一个5x5卷积核,其中包含完整的卷积核。它的处理结果是显示膨胀和腐蚀之间的差异。原创 2023-04-23 20:57:46 · 46 阅读 · 0 评论 -
4.4. 图像滤波
该高斯滤波器仅是空间的函数,即在滤波时考虑附近的像素。有趣的是,在上述滤波器中,中心元素是新计算的值,其可以是图像中的像素值或新值。双边滤波器在空间中也采用高斯滤波器,但是还有一个高斯滤波器是像素差的函数。空间的高斯函数确保仅考虑附近的像素用于模糊,而强度差的高斯函数确保仅考虑具有与中心像素相似的强度的像素用于模糊。因此它保留了边缘,因为边缘处的像素将具有较大的强度变化。操作步骤如下:将此核放在一个像素A上,求与核对应的图像上 25(5x5)个像素的和,取其平均值并用新的平均值替换像素A的值。原创 2023-04-23 20:57:30 · 44 阅读 · 0 评论