首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

消除或忽略大轮廓/矩形opencv中的所有小轮廓或重叠轮廓或矩形

在OpenCV中,要消除或忽略大轮廓/矩形中的所有小轮廓或重叠轮廓或矩形,可以通过以下步骤实现:

  1. 轮廓检测:使用OpenCV的findContours函数对图像进行轮廓检测,得到所有轮廓的列表。
  2. 轮廓过滤:遍历轮廓列表,根据一定的条件过滤掉小轮廓或重叠轮廓。可以使用contourArea函数计算轮廓的面积,通过设定一个阈值来判断轮廓是否足够大。
  3. 矩形合并:对于剩下的轮廓,可以使用boundingRect函数计算每个轮廓的边界矩形。然后,可以使用一定的规则来合并重叠的矩形,例如计算矩形之间的重叠区域,并根据重叠面积来判断是否合并。
  4. 绘制结果:根据过滤和合并后的轮廓或矩形,可以使用drawContoursrectangle函数在图像上绘制结果。

下面是一个示例代码,演示了如何实现上述步骤:

代码语言:txt
复制
import cv2
import numpy as np

# 读取图像
image = cv2.imread('image.jpg')

# 转换为灰度图像
gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)

# 二值化处理
ret, thresh = cv2.threshold(gray, 127, 255, cv2.THRESH_BINARY)

# 轮廓检测
contours, hierarchy = cv2.findContours(thresh, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)

# 过滤小轮廓
filtered_contours = [cnt for cnt in contours if cv2.contourArea(cnt) > 100]

# 合并重叠矩形
merged_rects = []
for cnt in filtered_contours:
    x, y, w, h = cv2.boundingRect(cnt)
    merged = False
    for i, rect in enumerate(merged_rects):
        if x >= rect[0] and y >= rect[1] and x + w <= rect[0] + rect[2] and y + h <= rect[1] + rect[3]:
            merged_rects[i] = (x, y, w, h)
            merged = True
            break
    if not merged:
        merged_rects.append((x, y, w, h))

# 绘制结果
result = image.copy()
for rect in merged_rects:
    x, y, w, h = rect
    cv2.rectangle(result, (x, y), (x + w, y + h), (0, 255, 0), 2)

# 显示结果
cv2.imshow('Result', result)
cv2.waitKey(0)
cv2.destroyAllWindows()

在这个示例中,我们首先读取图像并进行预处理,然后使用findContours函数检测轮廓。接下来,我们根据面积阈值过滤掉小轮廓,并使用一定的规则合并重叠的矩形。最后,我们在原始图像上绘制结果并显示出来。

请注意,这只是一个简单的示例,实际应用中可能需要根据具体情况进行调整和优化。另外,对于更复杂的图像和轮廓,可能需要使用更高级的算法和技术来实现更准确的结果。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

VC++中使用OpenCV进行形状和轮廓检测

如下面的图像Shapes.png中有三角形、矩形、正方形、圆形等,我们如何去区分不同形状,并且根据轮廓进行检测呢?...1、首先我们对原始图像进行预处理,将原始图形灰度化、高斯模糊、Canny边缘检测、膨胀化处理,最后得到一副膨胀图形 2、基于这幅膨胀图像,我们调用findContours函数从膨胀化二值图像检索出所有轮廓...,结果放到vector> contours数组 3、遍历每一个轮廓多边形,首选计算轮廓面积,过滤那些面积特别轮廓(比如面积小于1000则不处理,例如上图中那个黑色圆点...),消除噪声;计算轮廓周长(封闭或者非封闭)曲线长度,以指定精度逼近多边形曲线,计算顶点集合灰度图像非零像素右上边界矩形,获取边界包围盒;然后轮廓多边形角落(顶点)个数objCor,根据objCor...判断轮廓多边形形状类型,特别注意矩形和正方形区别,我们根据轮廓宽高比来区分,当轮廓宽高比大于0.95或者小于1.05时我们可以认定轮廓为正方形 4、最后我们在第三步基础上,绘制轮廓填充轮廓,颜色为粉色

7100

基于OpenCV特定区域提取

通过应用模糊函数“ GaussianBlur()”来消除灰度图像噪声 3. 最后将“ Canny()”函数应用于模糊图像以获得边缘 边缘检测过程输出如下所示: ?...现在,我们可以使用OpenCV函数“ findContours()”提取该图像轮廓,并仅选择具有以下属性轮廓: 1. 几何形状是圆形椭圆形 2....面积大于某个阈值(在此示例,值7000可以正常工作)。 对于第一部分,我们将使用OpenCV“ boundingRect()”检测每个轮廓边界矩形,并检查纵横比(高宽比)是否接近1。...现在我们任务已经完成,但还需要进行一些微调。 通常情况是在一个片段上检测到多个重叠轮廓,而我们只对一个感兴趣。...使用非极大抑制可以解决此问题,即我们查看所有重叠轮廓,然后选择面积最大轮廓作为最终候选轮廓。逻辑非常简单,因此我们不需要任何内置OpenCVPython函数。

2.8K30

总结 | 基于OpenCV提取特定区域方法汇总

通过应用模糊函数“ GaussianBlur()”来消除灰度图像噪声 3. 最后将“ Canny()”函数应用于模糊图像以获得边缘 边缘检测过程输出如下所示: ?...现在,我们可以使用OpenCV函数“ findContours()”提取该图像轮廓,并仅选择具有以下属性轮廓: 1. 几何形状是圆形椭圆形 2....面积大于某个阈值(在此示例,值7000可以正常工作)。 对于第一部分,我们将使用OpenCV“ boundingRect()”检测每个轮廓边界矩形,并检查纵横比(高宽比)是否接近1。...现在我们任务已经完成,但还需要进行一些微调。 通常情况是在一个片段上检测到多个重叠轮廓,而我们只对一个感兴趣。...使用非极大抑制可以解决此问题,即我们查看所有重叠轮廓,然后选择面积最大轮廓作为最终候选轮廓。逻辑非常简单,因此我们不需要任何内置OpenCVPython函数。

3.9K20

基于OpenCV实战:车牌检测

扫描图像以查看由边缘定义所有不同形状。 假设车牌是矩形,则在与之前步骤不同所有形状,找到与矩形最匹配形状。 一旦找到矩形,该形状内信息即为车牌号。 ? 1、识别输入数据是图像。...转换为灰度不仅可以减少计算复杂性,而且对于查找轮廓(稍后步骤)也很重要,因为OpenCV可以从黑色背景白色连接对象查找轮廓。 ? 调整大小并转换为灰度后图像: ?...我们将OpenCVCanny函数应用到预处理后图像上,以勾勒出其边缘颜色渐变。 在应用Canny函数之前,我们将首先对图像应用平滑方法以减少噪点。...3.假定车牌是矩形,从与前面步骤不同所有形状找出与矩形最匹配形状 当给人一张带有牌照图像时,我们眼睛就能从其他所有形状找出牌照,因为我们先验知识告诉我们这是一个矩形形状,具有四个相连角...然后,为了可视化它们,我们应用了drawContours函数将轮廓绘制到原始图像上。 ? ? 如图6所示,它具有许多轮廓,其中大多数轮廓形状不正确没有被认为是矩形区域。

1.5K20

利用OpenCV识别玻璃纤维织物劈缝缺陷

玻璃纤维织物是经编多轴向织物,由一层多层平行纱线按照尽可能多方向交错而成。...基于OpenCV机器视觉库图像处理法进行织物缺陷检测 首先对图像处理进行平滑处理以消除噪声干扰,然后对图像进行图像分割、形态学处理和特征提取,最后对提取缺陷特征进行参数计算,求出图像缺陷个数...形态学处理:采用形态学闭运算操作对二值化图像进行处理,消除干扰杂点,提高缺陷检出率及检测准确性。...特征提取:利用OpenCVfindContours实现形态学处理后图像轮廓提取与分析,先采用contourArea函数计算出每个轮廓面积,并通过与设定面积参数比较赛选出符合缺陷面积特征轮廓后,...特征参数计算:为计算织物位置和尺寸等特征,采用minAreaRect函数构造出缺陷轮廓最小外接矩形,由最小外接矩形中心X和Y坐标值、矩形倾斜角度、矩形宽度和高度等参数,从可计算出缺陷特征参数

40520

C++ OpenCV轮廓周围矩形和圆形绘制

前面我们学习了轮廓提取,正常我们在提到到轮廓截取出来时一般需要是矩形图像,这次我们就来学习一下轮廓周围绘制矩形等。...,就是另个轮廓点之间最大距离数,5,6,7,,8,,,,, bool closed:表示输出多边形是否封闭 ---- 矩形 boundingRect,得到轮廓周围最小矩形 Rect boundingRect...(InputArray points) points 二维点集,点序列向量 minAreaRect,得到最小外接矩形 Rect minAreaRect(InputArray points)...) points 二维点集,点序列向量 RotatedRect参数:包含中心点坐标,以及矩形长度和宽度还有矩形偏转角度 ---- 代码演示 新建一个项目opencv-0025,配置属性(VS2017...操作步骤 将源图像变为二值图像 发现轮廓,找到图像轮廓 通过API找到轮廓点上最小包含矩形,圆,椭圆 绘制图像 ? ? ? 多边形拟合 ? 可旋转最小矩形 ? 最小矩形 ? 最小包围圆形 ?

2.4K20

opencv小项目练习之数独求解

contours: 查找到轮廓,应该存储在vector>里,每一条封闭轮廓所有点会被当做一个vector来存储。...内内围轮廓还包含了其他轮廓信息,则内围内所有轮廓均归属于顶层 取值四:CV_RETR_TREE, 检测所有轮廓所有轮廓建立一个等级树结构。...=-1) //父轮廓是0号轮廓的话,就是矩形,存在子轮廓,则子轮廓是数字 81个小方框里面如果有轮廓的话,我们认为这个轮廓是数字,下面就是要定位这些数字,一种直观方法是用最小矩形包围数字,把数字抠图抠出来...最后我想出来一个比较暴力但是有效方法: 通过矩形质心在整幅图中位置来确定这个数字到底是哪行那列,这要求数独图像必须基本是正方形,而且边缘应该尽可能。...ml模块,要使用的话要包含#include,其中各种命名都包含在cv::ml这个命名空间之中。

1.4K10

使用网络摄像头和PythonOpenCV构建运动检测器(Translate)

并且,我们将应用一些复杂图像处理技术,例如阴影消除、扩张轮廓等,以完成在阈值帧上提取对象物体。以下是您要实现目标: 被探测对象 当这个对象进入帧和退出帧时,我们能够很容易捕获这两帧时间戳。...例如使用曲线近似曲线插值,也可以使用简单链近似规则,即压缩水平、垂直和对角线线段,只保留其端点。因此,我们能够很快得到最佳拟合轮廓。 ? 第八步:找到轮廓区域,并在矩形形成端点: ?...实际上我们并不想捕捉像昆虫这样物体,而是要捕捉像人动物这样大物体。因此我们采用轮廓区域概念,即跳过那些面积小于10000像素对象。对于大于此区域轮廓,我们将状态设置为1,即检测到对象。...到目前为止,所有的时间戳都存储在pandasdata-frame变量。为了从生成数据获得更多信息,我们将把data-frame变量导出到本地磁盘csv文件。 ?...请不要忘记释放视频变量,因为它在内存占用了不少空间。同时销毁所有窗口以避免出现不必要错误 这就是生成csv样子。正如我们所看到那样,在程序结束之前,这个对象已经被检测了3次。

2.8K40

OpenCV 轮廓 —— 轮廓分析

当分析一张图像时候,针对轮廓,我们也许有很多事情要做。毕竟,所有轮廓都是即将是我们想要进行识别操作。另外相关还有多种对轮廓处理,如描述轮廓,简化拟合轮廓,匹配轮廓到模板,等等。...本文记录 OpenCV 轮廓分析相关操作。 多边形逼近 当我们绘制一个多边形进行形状分析时,通常需要使用多边形逼近一个轮廓,使顶点数变少。...有多种方法可以实现这个功能,OpenCV实现了其中两种逼近方法。 Douglas-Peucker(DP) 逼近算法 该算法首先从轮廓(图B)挑出两个最远点,将两点相连(图C)。...然后在原来轮廓上寻找一个离线段距离最远点, 将该点加入逼近后轮廓。 算法反复迭代,不断将最远点添加到结果,直到所有点到多边形最短距离小于 parameter 参数指定精度(图F)。...从这里可以看出,将该精度设置为轮廓周长外包矩形周长等表示轮廓总长度几分之一比较合适。

3.1K20

OpenCV 入门教程:轮廓特征和轮廓匹配

在本文中,我们将以轮廓特征和轮廓匹配为中心,为你介绍使用 OpenCV 进行轮廓处理基本步骤和实例。...4 最小外接矩形( Minimum Enclosing Rectangle ):表示能够完全包围轮廓最小矩形框。...二、轮廓匹配 轮廓匹配是比较两个轮廓之间相似度差异度技术。通过计算轮廓形状、面积、周长等特征差异,并进行比较,我们可以判断轮廓之间相似性不相似性。...总结 通过本文介绍,你已经了解了使用 OpenCV 进行轮廓特征提取和轮廓匹配基本步骤。...通过提取轮廓特征并比较轮廓之间相似度,我们可以实现对图像目标区域定量分析和比较。 祝你在使用 OpenCV 进行轮廓特征和轮廓匹配过程取得成功!

2.5K10

计算机视觉 OpenCV Android | 基本特征检测 之 轮廓分析

调用该API会返回一个Rect对象实例,它是OpenCV关于矩形数据结构, 从中可以得到外界矩形(边界框)宽高, 然后就可以计算出轮廓横纵比了。...) 其中,points是轮廓所有集合对象。...调用该API会返回一个RotatedRect对象实例, 它是OpenCV关于旋转矩形数据结构, 其包含了旋转角度,矩形宽、高及四个顶点等信息, 通过相关API都可以查询获得, 绘制旋转矩形对象时候..., 首先需要得到四个顶点, 然后通过OpenCV绘制直线API来完成旋转矩形绘制。...(3)面积与周长 轮廓分析包含了轮廓大小度量, 这些度量最常见就是计算轮廓面积大小与长度大小, 这些数据对分析轮廓与过滤掉一些不符合条件轮廓十分有用。

1.4K20

C++ OpenCV视频操作之图像输出文字

前言 当我们视频分析时可能图像需要有一个文字说明,OpenCV本身也有这个API,我们就来看看OpenCV图像文字输出。...int thickness:字体粗细,我们下面代码使用是4号 int lineType:线型,我们使用默认值8. ---- 代码演示 这次我们用还是最开始我们用背景消除建模那个DEMO《C++...OpenCV视频操作之背景消除建模(BSM)-1》,在这个基础上我们加入文字输出,看看效果。...随手势实时显示 这个显示原理就是,首先根据图像寻找轮廓,然后根据找到轮廓获取它外接矩形,最后在矩形启点上输出文字。 ? ?...,当大于1000时进入 if(cv::contourArea(contours[i])>1000) { //获取轮廓矩形 cv::Rect rect

4.1K20

实战 | OpenCV如何将不同轮廓合并成一个轮廓(附源码)

导读 本文主要介绍如何用OpenCV将不同轮廓合并成一个轮廓实现方法和代码演示。...背景介绍 在图像处理应用场景中常常会遇到一种情况,本来是一个整体目标,因为不同亮度其他原因导致它分割成多个部分,这种情况在用OpenCV处理时候会被当成多个轮廓(如下图所示),那么遇到这种情况...,我们如何把不同轮廓合并成一个轮廓,然后做后续处理呢?...实现方法与步骤 这里我们不用上面的绘画图,而是使用下面这张图做演示: 我们目的:将上图中文字轮廓看成一个整体,然后求其最小外接矩形,获得角度,将文字旋转水平,后续可以做简单文字识别。....imshow('blur', blurImg) 【3】查找轮廓计算轮廓最小外接矩形 contours,hierarchy = cv2.findContours(blurImg, cv2.RETR_EXTERNAL

6K31

OpenCV消除高亮illuminationChange函数使用

——《微卡智享》 本文长度为1129字,预计阅读4分钟 导语 上一篇《OpenCV极坐标变换函数warpPolar使用》中介绍了极坐标变换使用,文中提到过因为手机拍照片,部分地方反光厉害。...OpenCV本身也有一个消除高亮函数,今天这篇就是来了解一下消除高亮函数使用,就结果来说,有效果,但不多。...原理就是根据生成矩形大小生成一个全黑背景,然后将圆区域整个填充为白色,通过Mat.copyTo方法实现。...A 看到这里可能有人会提问,代码threshold二值化找到高光部分是不是直接可以当掩膜了,这个我开始也想直接这样,省去了查找轮廓部分,不过测试过程中直接报错了,也就是说去高光函数掩膜区域里面只能是矩形...,所以需要再加一步查找轮廓,针对轮廓生成外接矩形填充后才能使用。

64710

Python项目实战篇——常用验证码标注&识别(数据采集预处理字符图切割)

三、预处理 预处理:根据需求分析字符切割描述,针对笔者图片验证码案例情况,需要先进行常规验证码图片预处理,预处理通过OpenCV库实现,处理过程为: 原始图->灰度图->中值滤波->二值化->轮廓检测绘制...灰度图中值滤波:进行噪音去除,取中间像素平均值 二值化:只留下0、255二种值,方便轮廓检测 轮廓检测:这一步主要用于提取字符轮廓矩形坐标,不适合字符挨得特别紧情况 字符切割填充:根据生成字符轮廓图片矩形坐标进行切割再填充对齐到指定宽高...) 详细代码可以阅读源码,这里说一下这个过程笔者编写预处理代码遇到几个问题: 部分图片轮廓检测可以检测到多个轮廓,部分图片只有1-2个轮廓,部分可能一个轮廓都没有,这里代码进行了相应调整处理...,比如过滤大外部轮廓和较小内部轮廓,根据剩下轮廓进行坐标排序,根据部分坐标得到所有字符轮廓 得到4个字符轮廓图片后,每个图片大小不一致,需要进行大小补齐,这个宽高参数需要根据数据集进行调整...下一篇文章,编给大家介绍高效率、可复用通用图片验证码数据标注功能实现。 小伙伴们,快快用实践一下吧!

71720

【从零学习OpenCV 4】轮廓外接多边形

本小节将介绍OpenCV 4提供轮廓外接多边形函数,实现图像轮廓形状拟合。...矩形是常见几何形状,矩形处理和分析方法也较为简单,OpenCV 4提供了两个函数求取轮廓外接矩形,分别是求取轮廓最大外接矩形boundingRect()函数和求取轮廓最小外接矩形minAreaRect...为了了解两个外接矩形函数使用方法,代码清单7-21给出了提取轮廓外接矩形示例程序。...程序首先利用Canny算法提取图像边缘,之后通过膨胀算法将邻近边缘连接成一个连通域,然后提取图像轮廓,并提取每一个轮廓最大外接矩形和最小外接矩形,最后在图像绘制出矩形轮廓,程序运行结果在图7...OpenCV 4提供了approxPolyDP()函数用于寻找逼近轮廓多边形,该函数函数原型在代码清单7-22给出。

3.6K00

【干货】C++ OpenCV案例实战---卡片截取(附代码

前言 我们已经更新了不少OpenCV基础文章了,为了巩固一下学习效果,我们就做案例实战进行强化。 实现效果 今天我照了一张自己健身卡图片,然后想到实现整体切边效果,先上一下源图 ?...可以看出来,我们边缘提取后找到了1332个轮廓,这个轮廓我们只需要找到我们想到的卡信息,所以我们就来到下一步 ---- 第四步 定义最小轮廓宽高,画出想要轮廓 可以看到图中卡片占了图片一半以上...可以看出,我们要找到矩形完全不是我们想要结果,在红色轮廓里面发现卡片和桌面上纹理连到一起了,说明我们在Canny边缘提取时候需要进行二值化处理,去掉一些不用结果 ---- 第五步 对源图像进行...右边就是我们完美截取的卡片图像,成功~~~~ ---- 总结一下实现流程 加载图片 转为灰度图 图像高斯模糊 进行闭操作(先膨胀后腐蚀) Canny边缘提取 寻找轮廓 轮廓查找符合要求项 获取上一步对应项最小矩形...从源图像截取最小矩形生成新图片 以上是我自己实验生成效果,如果有更好方法请消息我,毕竟我也是初学者~~ ---- main单元代码 #include

2.5K20

前端 + AI —— 走进无码时代

"""剔除噪点""" continue data.append((cnt, x, y, w, h)) return data 这一步我们得到了图像中所有组件轮廓以及具体坐标...2.2.1 矩形检测 检测矩形主要分两步:1)通过霍夫直线变换检测外轮廓边;2)根据边(线段)集合判断是否符合矩形特征。...OpenCV提供线段检测方法cv2.HoughLinesP,输入外轮廓,输出检测到线段,具体代码实现如下: # 检测矩形 def detectRectangle(img, width, height)...< th) & (abs(rx - x - w / 2) < th) & (abs(ry - y - h / 2) < th) ) 通过这一步,我们筛选出属于矩形圆形组件...3.1 圆角计算 在样式定义,圆角被限制在矩形四个顶点处,圆角弧度取决于它半径,因此圆角计算主要目标就是识别圆角半径。 根据圆角4个方位,我们将组件区域划分为4块进行逐块分析。

1.2K30
领券