最近,TensorFlow 的「物体检测 API」有了一个新功能,它能根据目标对象的像素位置来确定该对象的像素。换句话来说,TensorFlow 的物体检测从原来的图像级别成功上升到了像素级别。...使用 TensorFlow 的「物体检测 API」图片中的物体进行识别,最后的结果是图片中一个个将不同物体框起来的方框。...最近,这个「物体检测 API」有了一个新功能,它能根据目标对象的像素位置确定该对象的像素,实现物体的像素分类。 ?...TensorFlow 的物体检测 API 模型——Mask-RCNN 实例分割 「实例分割」是物体检测的延伸,它能让我们在普通的物体检测的基础上获取关于该对象更加精确、全面的信息。...使用 fl_image 功能对视频中截取的每张图片进行物体检测,然后用修改后的视频图片替换原本的视频图片; 3. 最后,将修改后的视频图像合并成一个新的视频。
深度学习分割出绳子如 segformer 模型,后处理找出像素包络框, 计算最小矩形框,跟踪,赋值id。 发送凸包以及相应的距离信息。...流程图 (一)最小矩形框 由于检测分割管线,输入的是管线像素的包络点。点的输入可能会大于2000,单纯对点的跟踪耗时长且不稳定。...而点应该是包络框的形式,则需要计算凸包减少点的传递,避免增加无效的计算。(你要是一次性传上千个点,你看规控的人打不打你[坏笑.jpg])。 蓝色框是跟踪框包络点的最小凸包。...获得了凸包的像素点,直接输出像素点的世界坐标,最终得到的包络框输出给规控。 计算凸包可以利用 opencv 中 cv::convexHull 函数,输入所有点像素,得出凸包点像素。...根据凸包点像素发送俯视图下的位置就可。
凸包 凸包指如果在集合A内连接任意两个点的直线段都在A的内部,则称集合A是凸形的。简单点理解,就是一个多边型,没有凹的地方。...凸包(凸壳)能包含点集中所有的点,凸包检测常应用在物体识别、手势识别及边界检测等领域。 一个轮廓可以有无数个包围它的外壳,而其中表面积最小的一个外壳,就是凸包。...相关API OpenCV中提供了函数convexHull()用于对物体轮廓凸包进行检测,对形状的凸包缺陷分析时使用 void convexHull( InputArray points, OutputArray...hull:凸包点集输出。类型要么为整型向量,要么为点集向量,如果是整型向量,那么存储的只是索引,索引的对象是输入二维点集(如果不懂这句话的意思,看一遍下面给出的源码就清楚了)。...returnPoints: 表示返回点个数,如果第二个参数是vector则自动忽略 代码演示 实现步骤 图像从RGB转换为灰度图 灰度图转为二值图像 通过发现轮廓得到候选点 凸包API
边缘检测的一般步骤: 滤波:滤出噪声対检测边缘的影响 ; 增强:可以将像素邻域强度变化凸显出来—梯度算子 ; 检测:阈值方法确定边缘 ; 常用边缘检测算子: Canny 算子,Canny 边缘检测函数...轮廓查找与绘制 核心要理解到在 OpenCV 中,查找轮廓就像在黑色背景中找白色物体。...轮廓特征属性及应用 这部分内容比较重要,并且知识点比较多,核心内容与函数分别如下: 寻找凸包 cv2.convexHull() 与 凸性检测 cv2.isContourConvex(); 轮廓外接矩形...特征检测与匹配 特征点的检测和匹配是计算机视觉中非常重要的技术之一, 在物体识别、视觉跟踪、三维重建等领域都有很广泛的应用。...OpenCV 应用部分之运动物体跟踪与人脸识别 了解何为运动物体检测,OpenCV 中常用的运动物体检测方法有背景减法、帧差法、光流法,跟踪算法常用的有 meanShift, camShift,粒子滤波
OpenCV-Python接口中使用cv2.findContours()函数来查找检测物体的轮廓。 实现 使用方式如下: import cv2 img = cv2.imread("....如果内孔内还有一个连通物体,这个物体的边界也在顶层。 cv2.RETR_TREE 建立一个等级树结构的轮廓。...第三个参数method为轮廓的近似办法 cv2.CHAIN_APPROX_NONE 存储所有的轮廓点,相邻的两个点的像素位置差不超过1,即max(abs(x1-x2),abs(y2-y1))==1...[i][0] ~hierarchy[i][3],分别表示后一个轮廓、前一个轮廓、父轮廓、内嵌轮廓的索引编号,如果没有对应项,则该值为负数。...2)的错误 最近在OpenCV-Python接口中使用cv2.findContours()函数来查找检测物体的轮廓。
,是膨胀图像与腐蚀图像之差 ,可以得到图像的轮廓,通常用于提取物体边缘。...凸包也称凸壳,就是用一个"橡皮圈”来包裹物体。...参数说明: points:输入图像,可以为单通道或多通道 hull:输出凸包,凸包点的索引向量,或凸包点集的向量 clockwise:方向标志,True 表示顺时针方向输出凸包,否则为逆时针方向输出...# 计算轮廓 contours[i] 的凸包 hullAll.append(hull) colorContours = (0, 255, 0) # 设置轮廓的颜色 colorConvexHull...边缘检测原理:图像中的物体在膨胀时向周围扩张,在腐蚀时会发生收缩,变化的区域都只发生在物体的边缘。
1.1什么是轮廓 轮廓可以简单认为成连续的点(连着边界)连在一起的曲线,具有相同的颜色或者灰度。轮廓在形状分析和物体的检测和识别中很有用。为了准确,要使用二值化图像。...需要进行阀值化处理或者Canny边界检测。查找轮廓的函数会修改原始图像。如果之后想继续使用原始图像,应该将原始图像储存到其他变量中。在OpenCV中,查找轮廓就像在黑色背景中超白色物体。...例如下图中的手,红色曲线显示了手的凸包,凸性缺陷被双箭头标出来了。?...它会返回凸包上点的坐标,如果设置为False,就会返回与凸包点对应的轮廓上的点。...2.6凸性检测 函数cv2.isContourConvex()可以检测一个曲线是不是凸的。它只能返回True或者False。
因此,此时无法通过凹陷区域的个数来识别手势所表示的数字。这种情况下,就需要应用到凸包的概念。 逼近多边形是轮廓的高度近似,但是有时候,我们希望使用一个多边形的凸包来简化它。...凸包跟逼近多边形很像,只不过它是物体最外层的“凸”多边形。凸包指的是完全包含原有轮廓,并且仅由轮廓上的点所构成的多边形。凸包的每一处都是凸的,即在凸包内连接任意两点的直线都在凸包的内部。...图2 凸包示意图 应用凸包与轮廓的关系即可判断手势0和手势1的差别。如图 3所示,手势0与手势1在以下方面存在着差别: 手势0的凸包,与其轮廓基本一致。 手势1的凸包,要大于其轮廓值。...在手势1的轮廓与凸包之间存在着相对较大的凹陷区域(凸缺陷),凹陷区域面积占比在10%以上。当然,这个10%是个大概值,它因人而异,不是固定值。不同的人手指长度一样,因此该值有一定的波动范围。...这些案例中,既有传统的案例(数字识别、答题卡识别、物体计数、缺陷检测等),也有深度学习案例(图像分类、风格迁移、姿势识别、实例分割等),还有人脸识别方面(表情识别、驾驶员疲劳监测、识别性别与年龄等)案例
: cntArea+=cv2.contourArea(i)#计算轮廓面积 for cnt in contours: hull=cv2.convexHull(cnt)#计算凸包 length...hullArea=cv2.contourArea(hull)#计算凸包面积 Solidity=float(cntArea)/hullArea#计算Solidity print(Solidity) cv2....imshow("result2",o1) cv2.waitKey() cv2.destroyAllWindows() 算法:Solidity是轮廓面积与凸包面积之比,作为图像、轮廓及凸包的特征...Solidity=轮廓面积 / 凸包面积 Solidity=float(cntArea)/hullArea cntArea表示轮廓面积 hullArea表示凸包面积 注意:轮廓就像从黑色背景中找到白色物体...,通常情况下,预先对图像进行阈值分割或边缘检测得到二值图像。
(DPM)2007 通用物体检测,再到现在基于深度学习的 Region Convolution(RCNN)2013 模型,我们见证了物体检测的准确率快速的提升,并且计算机视觉所使用的数学方法也从 Boosting...基于物体检测,研究者们成功的设计出了实例分割 Mask RCNN。...作者在 Semantic segmentation 和物体检测任务上面测试了方法,without bells and whistles,作者可以达到 state-of-the-art 的结果(仅仅物体检测...物体检测框架的改进 由于 NMS(Non Maximum Suppression)的存在,使得 RCNN 框架的物体检测不是完全的 end-to-end 模型,代季峰组的 Relation Network...可以代替 NMS ,实现 100% 的 end-to-end 物体检测。
标记,可理解为计算机视觉中的物体检测,先声明一下哈这里没有用到神经网络,都是传统方法 先看一下效果,以下是原图 ?...下面是最终检测出来的效果图: ?...可以看到图 2,3,4 中的特征点分别分为两类,用不同的颜色进行标记;后面再做一次条件筛选:只取图片中特征点数量最多的类(圣诞树),就可以把图像中的噪点去除 3,对目标特征点集计算凸包,在原图上绘制 最后这一步就简单多了...,有了特征点集,利用 scipy 包 中的 ConvexHull 方法计算 凸包 ,之后再利用matplotlib 将凸包在原图上进行绘制 ?...小结 文章中的一些技术点是值得借鉴,例如前面提到的用色调、饱和度作为阈值条件来筛选特征点,及后面的 DBSCAN 聚类算法的使用;这些 Idea 不仅局限在圣诞树上,也可以用于检测其它的一些物体上面来,
红线表示手的凸体。双面的箭头标志显示了凸性缺陷,这是局部最大凸包与轮廓的偏差。 关于它的语法,有一点需要讨论。...如果它是True,输出的凸面体是顺时针方向的。否则,它的方向是逆时针的。 • returnPoints : 默认为 "真"。然后,它返回凸包点的坐标。...如果是False,它返回与凸包点对应的轮廓点的索引。...绿色矩形显示的是正常的边界矩形。红色矩形是旋转后的矩形。 8. 最小包围圈 接下来,我们使用cv.minEnclosingCircle()函数找到一个物体的圆。它是一个以最小面积完全覆盖物体的圆。...拟合椭圆 下一个是将一个椭圆拟合到一个物体上。它返回旋转后的矩形以及内接的椭圆。
第三幅图显示了ε=弧长度的1%时的情况。第三个参数指定曲线是否闭合。 ? 5. 轮廓凸包 凸包外观看起来与轮廓逼近相似,但不相似(在某些情况下两者可能提供相同的结果)。...一般而言,凸曲线是始终凸出或至少平坦的曲线。如果在内部凸出,则称为凸度缺陷。例如,检查下面的手的图像。红线显示手的凸包。双向箭头标记显示凸度缺陷,这是凸包与轮廓线之间的局部最大偏差。 ?...凸包是输出,通常我们忽略它。 顺时针方向:方向标记。如果为True,则输出凸包为顺时针方向。否则,其方向为逆时针方向。 returnPoints:默认情况下为True。然后返回凸包的坐标。...如果为False,则返回与凸包点相对应的轮廓点的索引。...绿色矩形显示正常的边界矩形。红色矩形是旋转后的矩形。 ? 8. 最小闭合圈 接下来,使用函数cv.minEnclosingCircle()查找对象的圆周。它是一个以最小面积完全覆盖物体的圆。
凸性缺陷以及如何找到它们。 2. 寻找从一个点到一个多边形的最短距离 3. 匹配不同的形状 理论和代码 1. 凸性缺陷 我们在关于轮廓的内容中看到了什么是凸面体。...任何偏离这个凸包的物体都可以被认为是凸性缺陷。 OpenCV提供了一个现成的函数来寻找这个缺陷,即cv.convexityDefects()。一个基本的函数调用看起来如下。...点多边形测试 这个函数找出图像中的一个点和一个轮廓线之间的最短距离。它返回的距离是:当点在轮廓线外时为负数,当点在轮廓线内时为正数,如果点在轮廓线上则为零。...如果是False,它将发现该点是在轮廓线内还是在轮廓线外或在轮廓线上(它分别返回+1、-1、0)。 注意:如果你不想找距离,确保第三个参数是False,因为这是一个耗时的过程。...查看cv.pointPolygonTest()的文档,你可以找到一个红蓝相间的漂亮图像。它代表了所有像素到上面的白色曲线的距离。曲线内的所有像素都是蓝色的,这取决于距离。同样地,外面的点是红色的。
计算凸包及更多轮廓特征。图片等可到文末引用处下载。 多边形逼近 前面我们学习过最小外接矩和最小外接圆,那么可以用一个最小的多边形包围物体吗?...凸包 凸包跟多边形逼近很像,只不过它是物体最外层的"凸"多边形:集合A内连接任意两个点的直线都在A的内部,则称集合A是凸形的。...如下图,红色的部分为手掌的凸包,双箭头部分表示凸缺陷(Convexity Defects),凸缺陷常用来进行手势识别等: # 1.先找到轮廓 img = cv2.imread('convex.jpg'...,得到凸包的角点 hull = cv2.convexHull(cnt) # 3.绘制凸包 image = cv2.cvtColor(image, cv2.COLOR_GRAY2BGR) cv2.polylines...当使用cv2.convexityDefects()计算凸包缺陷时,returnPoints需为False,详情可参考:Convexity Defects 另外可以用下面的语句来判断轮廓是否是凸形的: print
读入彩色3通道图像,转换成灰度图像,再转换成二值图像,完后检测轮廓。 // cvtcolor.cpp : 定义控制台应用程序的入口点。... } //将第一个点和最后一点连起来 line(result,*(poly.begin()),*(poly.end()-1),Scalar(128),2); //计算凸包...mode表示轮廓的检索模式 CV_RETR_EXTERNAL表示只检测外轮廓 CV_RETR_LIST检测的轮廓不建立等级关系 CV_RETR_CCOMP建立两个等级的轮廓,上面的一层为外边界,里面的一层为内孔的边界信息...如果内孔内还有一个连通物体,这个物体的边界也在顶层。 CV_RETR_TREE建立一个等级树结构的轮廓。...得到了复杂轮廓往往不适合特征的检测,这里再介绍一个点集凸包络的提取函数convexHull,输入参数就可以是contours组中的一个轮廓,返回外凸包络的点集 还可以得到轮廓的外包络矩形,使用函数boundingRect
优化后,我们将断墙拆分为“核心碰撞层”与“细节碰撞层”:核心碰撞层用2个胶囊体拼接(底部胶囊高1.5米、半径0.3米,顶部胶囊高0.7米、半径0.25米)模拟断墙主体轮廓,负责处理角色翻越、倚靠等关键交互...,面数仅20+,碰撞计算耗时降至0.3ms;细节碰撞层针对断墙表面突出的门簪石雕(高0.3米、宽0.2米),采用简化凸包碰撞体(面数50-80),并通过“距离激活”逻辑控制计算时机—仅在角色距离石雕0.5...初始方案中,陶罐碰撞后会触发Havok物理引擎的实时破碎算法,生成15-20个不规则碎片,每个碎片都有独立碰撞体(凸包面数20-30)与物理参数(质量0.2kg、摩擦系数0.4),碎片生成瞬间需计算碰撞力传递...,仅12个动态物体就占用每帧碰撞计算量的25%(2300次/帧),其中80%的计算属于“无效交互”(角色距离物体5米以上,无碰撞可能)。...在碰撞体简化上,我们将移动端的静态物体碰撞体面数压缩50%:比如PC端石阶用80面简化Mesh碰撞体,移动端则进一步简化为40面凸包碰撞体,去除台阶边缘的磨损细节(玩家在移动端小屏幕上难以感知);同时合并小尺寸静态物体的碰撞体
如何实现,通过上一课中的remap我们知道可以将图像灰度分布从一个分布映射到另外一个分布,然后在得到映射后的像素值即可。...正式定义: 包含点集合S中所有点的最小凸多边形称为凸包 2、概念介绍-Graham扫描算法 首先选择Y方向最低的点作为起始点p0 从p0开始极坐标扫描,依次添加p1….pn(排序顺序是根据极坐标的角度大小...,逆时针方向) 对每个点pi来说,如果添加pi点到凸包中导致一个左转向(逆时针方法)则添加该点到凸包, 反之如果导致一个右转向(顺时针方向)删除该点从凸包中 3、API说明cv::convexHull...凸包API调用 绘制显示。..., Mat::Zero(400, 400, CV_8UC1) 画上一个六边形的闭合区域line 发现轮廓 对图像中所有像素点做点 多边形测试,得到距离,归一化后显示。
for cnt in contours: hull=cv2.convexHull(cnt)#计算凸包 length=len(hull) if length>5:...hull=cv2.convexHull(cnt,returnPoints=False)#计算凸包 defects=cv2.convexityDefects(cnt,hull)#计算凸缺陷 for j...凸缺陷是图像上的所有凹陷,是图像外轮廓和凸包之间存在的偏差。...理解物体形状或轮廓的一种方法便是计算一个物体的凸包,然后计算其凸缺陷。每个缺陷区包含4个特征量:起点、终点、距离和最远点。起点和终点画一条直线,在最远点画个圆,构成凸缺陷区。...convexityDefects=cv2.convexityDefects(contour, convexhull) contour表示轮廓 convexhull表示凸包 注意:参数returnPoints