一个跟轮廓相关的最常用到的功能是如何匹配多条轮廓。我们或许需要比较两条计算好的轮廓,或者比较一条轮廓和一个抽象模板。这两种情况都会在本文讨论。...矩 相关介绍 比较两条轮廓最简洁的方法之一是比较它们的轮廓矩。轮廓矩代表了一条轮廓、一幅图像、一组点集的某些高级特征。下面的所有讨论对轮廓、图像、点集都同样适用,简便起见,将它们统称为对象。...官方文档 仅适用于来自 Python 绑定的轮廓矩计算: 注意,输入数组的 numpy 类型应该是 np.int32或 np.float32。...OpenCV 努力提供比矩匹配更好的形状匹配算法 https://docs.opencv.org/4.5.5/d1/d85/group__shape.html#ga1d058c5d00f6292da61422af2f3f4adc...在 OpenCV 4.5.5 中还没有实现,有传说在 3.5 的版本中有相关函数 源码 https://github.com/zywvvd/Python_Practise/tree/master/OpenCV
OpenCV 入门教程:轮廓特征和轮廓匹配 导语 轮廓特征和轮廓匹配是图像处理中用于描述和比较轮廓的技术。通过提取轮廓的形状、面积、周长等特征,并进行比较和匹配,我们可以实现目标识别、形状分析等应用。...在本文中,我们将以轮廓特征和轮廓匹配为中心,为你介绍使用 OpenCV 进行轮廓处理的基本步骤和实例。...二、轮廓匹配 轮廓匹配是比较两个轮廓之间的相似度或差异度的技术。通过计算轮廓的形状、面积、周长等特征的差异,并进行比较,我们可以判断轮廓之间的相似性或不相似性。...三、示例应用 现在,我们来看一些常见的示例应用,演示轮廓特征和轮廓匹配的操作: 3.1 目标识别 使用轮廓特征和轮廓匹配可以实现目标识别,通过比较轮廓特征的相似度,判断是否存在目标对象。...你学会了使用 findContours 函数寻找轮廓,并通过计算轮廓的形状、面积、周长等特征进行轮廓匹配和形状分析。 轮廓特征和轮廓匹配是图像处理中常用的技术,可以应用于目标识别、形状分析等多个领域。
从图上我们可以看出来,通过鼠标点击找到我们要实现的轮廓,然后通过匹配轮廓把找到的轮廓在左边的图中都画出来,其中是我们点击的轮廓就红色填充,匹配的相似轮廓用的蓝色填充,就是实现的一个这样简单的效果。...综合练习知识点 # 实现的方式及用到的学习函数 1 通过点击鼠标来选中需要匹配的轮廓,所以用到了setMouseCallback函数 2 基本图像操作,灰度图,高斯模糊,形态学梯度操作 3 查找轮廓findContours...,获取鼠标点击的轮廓pointPolygonTest 4 轮廓匹配matchShapes 代码实现 ?...opencv.hpp> #include using namespace cv; using namespace std; class matchShape { private: //匹配阈值...double threshdouble = 0.3; //获取图像轮廓 vector> getContours(Mat src); //获取点击的点的所在轮廓
范围 范围是轮廓区域与边界矩形区域的比值。...等效直径 等效直径是面积与轮廓面积相同的圆的直径。
虽然Canny.之类的边缘检测算法可以根据像素间的差异检测出轮廓边界的像素,但是它并没有将轮廓作为一个整体进行处理。下一步是要将这些边缘像素合成轮廓。...轮廓层次 在了解到底如何提取轮廓之前,有必要花一些时间来理解轮廓到底是什么以及一组轮廓之间如何互相关联。...图中有五块颜色区域(分别标记为A,B,C,D,E), 每块区域的外部边界和内部边界都各自组成轮廓。因此共有9条轮廓。每条轮廓都由一组输出列表表示(右上角图一轮廓参数)。...# 轮廓近似法 contours[, # 检测到的轮廓。...如果为 1,则函数绘制轮廓和所有嵌套轮廓。 如果为 2,则函数绘制轮廓、所有嵌套轮廓、所有嵌套到嵌套的轮廓,依此类推。仅当存在可用层次结构时才考虑此参数。
当分析一张图像的时候,针对轮廓,我们也许有很多事情要做。毕竟,所有轮廓都是或即将是我们想要进行识别或操作的。另外相关的还有多种对轮廓的处理,如描述轮廓,简化或拟合轮廓,匹配轮廓到模板,等等。...Douglas-Peucker(DP) 逼近算法 该算法首先从轮廓(图B)中挑出两个最远的点,将两点相连(图C)。然后在原来的轮廓上寻找一个离线段距离最远的点, 将该点加入逼近后的新轮廓中。...从这里可以看出,将该精度设置为轮廓周长或外包矩形周长等表示轮廓总长度的值的几分之一比较合适。...这可能包括长度或其他一些反应轮廓整体大小的量度。另一个有用的特性是轮廓矩(contour moment)可以用来概括轮廓的总形状特性,这部分我们在下一节讨论。...isContourConvex(contours[0])) print(cv2.isContourConvex(hull)) --> False True 源码 https://github.com/zywvvd/Python_Practise
外延 外延是指轮廓线面积与边界矩形面积的比率。...实体性 实体性是指轮廓面积与凸包面积的比率。...等效直径 等效直径是指其面积与轮廓面积相同的圆的直径。 area = cv.contourArea(cnt) equi_diameter = np.sqrt(4*area/np.pi) 5.
凸性缺陷 我们看到了关于轮廓的第二章的凸包。从这个凸包上的任何偏差都可以被认为是凸性缺陷。 OpenCV有一个函数来找到这个,cv.convexityDefects()。...点多边形测试 这个函数找出图像中一点到轮廓线的最短距离。它返回的距离,点在轮廓线外时为负,点在轮廓线内时为正,点在轮廓线上时为零。...形状匹配 OpenCV附带一个函数cv.matchShapes(),该函数使我们能够比较两个形状或两个轮廓,并返回一个显示相似性的度量。结果越低,匹配越好。它是根据矩值计算出来的。...我得到以下结果: - 匹配的图像A与本身= 0.0 - 匹配图像A与图像B = 0.001946 - 匹配图像A与图像C = 0.326911 看,即使是图像旋转也不会对这个比较产生很大的影响。...对轮廓的这些属性暂时不是很感兴趣,就直接摘抄下来了。
该系列文章是讲解Python OpenCV图像处理知识,前期主要讲解图像入门、OpenCV基础用法,中期讲解图像处理的各种算法,包括图像锐化算子、图像增强技术、图像分割等,后期结合深度学习研究图像识别...希望文章对您有所帮助,如果有不足之处,还请海涵~ 前面一篇文章介绍了图像分类知识,包括常见的图像分类算法,并介绍Python环境下的贝叶斯图像分类算法、基于KNN算法的图像分类和基于神经网络算法的图像分类等案例...如果有问题随时私聊我,只望您能从这个系列中学到知识,一起加油喔~ 代码下载地址(如果喜欢记得star,一定喔): https://github.com/eastmountyxz/ImageProcessing-Python
贪婪匹配 str_pat = re.compile(r'"(.*)"') text1 = 'Computer says "no."'...非贪婪匹配 str_pat = re.compile(r'"(.*?)"') str_pat.findall(text2) ['no.', 'yes.']
这篇文章主要介绍了python 基于opencv 绘制图像轮廓的示例,帮助大家更好的利用python的opencv库处理图像,感兴趣的朋友可以了解下 图像轮廓概念 轮廓是一系列相连的点组成的曲线,代表了物体的基本外形...谈起轮廓不免想到边缘,它们确实很像。简单的说,轮廓是连续的,边缘并不全都连续(下图)。...,一般使用cv.RETR_TREE,表示提取所有的轮廓并建立轮廓间的层级。...函数有2个返回值,hierarchy是轮廓间的层级关系,这个不用理会。我们主要看contours,它就是找到的轮廓了,以链表形式存储,记录了每条轮廓的所有像素点的坐标(x,y)。 ?...以上就是python 基于opencv 绘制图像轮廓的详细内容
今天分享一个OpenCV检测轮廓极点实例,原图如下,我们需要检测出地图中最大轮廓的上下左右四个极点,并进行标注显示。 ? 第一步:阈值处理分割出地图轮廓 ?...第二步:轮廓筛选,找到我们需要的轮廓 第三步:计算对应轮廓的极点坐标并标注 Python OpenCV源码与效果图如下: import numpy as np import cv2...C++ OpenCV核心代码如下: box[i] = minAreaRect(Mat(contours[i])); //计算每个轮廓最小外接矩形 if (box[i].size.width < 50...|| box[i].size.height < 50) continue; //计算轮廓极值点 Point extLeft = *min_element(contours[i].begin(),
匹配字符串中的一个百分比数字 import re t = 'yuchen is a very lovely girl. 5.568% company ltd.' match = re.search(r"...\d*%", t) print(match.group()) 2.匹配小括号()里面的内容 # 这种方式的输出是列表类型, 不包含括号本身 import re t = '(123, "345")' match...= re.findall( r"[(](.*)[)]", t ) print(match) 3.匹配字符串中的一个数字 import re t = '123 entity' match = re.search
它可以让正则表达式中的点(.)匹配包括换行符在内的任意字符。比如: comment = re.compile(r'/*(.*?)
threshold(gray,235,255,cv2.THRESH_BINARY)#将灰度图片转换为二值图片 contours,hierarchy=cv2.findContours(thresh,2,1)#计算图像轮廓...(轮廓)的最短距离(垂线距离),又称点和多边形的关系测试。...,表示计算点到轮廓的距离。...如果点在轮廓的外部,返回值为负数;如果点在轮廓上,返回值为0;如果点在轮廓内部,返回值为正数。如果为False,不表示计算距离,表示点相对于轮廓的位置关系,返回值为-1、0和1。...如果点在轮廓的外部,返回值为-1;如果点在轮廓上,返回值为0;如果点在轮廓内部,返回值为1
匹配字符串中的一个百分比数字import ret = 'yx is a very lovely girl. 5.568% company ltd.'match = re.search(r"\d+\....\d*%", t)print(match.group())2.匹配小括号()里面的内容# 这种方式的输出是列表类型, 不包含括号本身import ret = '(123, "345")'match =...re.findall( r"[(](.*)[)]", t )print(match)3.匹配字符串中的一个数字import ret = '123 entity'match = re.search(r"
import re def fuzzyfinder(input, collection, accessor=lambda x: x): """ ...
#将灰度图片转换为二值图片 contours,hierarchy=cv2.findContours(binary,cv2.RETR_LIST,cv2.CHAIN_APPROX_SIMPLE)#计算图像轮廓...temp) cnt=contours[i] mask=np.zeros(gray.shape,np.uint8) cv2.drawContours(mask,[cnt],0,255,2)#绘制图像空心轮廓...[115 225] [115 226] [115 227]] 算法:空心轮廓是通过获取特定对象的掩模图像及其对应的像素点位置信息来获取空心轮廓,应用在图像噪声消除等领域。...函数cv2.drawContours()的轮廓宽度参数thickness设置为-1,即获取图像的实心轮廓。
匹配×××号码: import re str=''' 340800197606129559 130803198801278415 211282200011084484 520111199309186411...匹配电话号码 str = ''' 15210885691 aas45541563 11223434556 11223569987 uud123asfdg 1598364894316 ''' # str
#将灰度图片转换为二值图片 contours,hierarchy=cv2.findContours(binary,cv2.RETR_LIST,cv2.CHAIN_APPROX_SIMPLE)#计算图像轮廓...contoursImg=[] for i in range(n): print("contours["+str(i)+"]面积=",cv2.contourArea(contours[i]))#计算轮廓面积...4.0 contours[16]面积= 3263.0 contours[17]面积= 9103.5 contours[18]面积= 6578.5 contours[19]面积= 8974.5 算法:轮廓面积是估算图像轮廓部分和起始点连线构成的封闭部分的像素数量...retval=cv2.contourArea(contour[, oriented])) contour表示图像轮廓 oriented表示布尔型值,如果为True,则返回值包含正/负号,表示轮廓是顺时针还是逆时针...,默认值是False,表示返回retval是绝对值 注意:轮廓面积的单位是像素。
领取专属 10元无门槛券
手把手带您无忧上云