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

Python OpenCV findContours()函数与drawContours()函数用法

我用的Python3.6,OpenCV3.4。Python3.x与2.x语法不一样,OpenCV2.x与3.x也不一样。看之前得清楚自己用的啥。 本文说白了就是个简单的查找轮廓,并且绘制轮廓。...函数cv2.findContours()有三个参数。第一个是输入图像,第二个是轮廓检索模式,第三个是轮廓近似方法。而返回值根据OpenCV版本不同也不一样,但这俩个版本都会返回一个元组。...OpenCV2.x版本第一个元素是轮廓,,而在OpenCV3.x中第二个才是轮廓。这个轮廓是一个列表,每个列表元素代表着一个轮廓。 cv2.findContours()第二个参数有什么用?...而在OpenCV有哪些参数可选呢? RETR_LIST 从解释的角度来看,这中应是最简单的。它只是提取所有的轮廓,而不去创建任何父子关系。...) #提取轮廓 contours = h[0] #打印返回值,这是一个元组 print(type(h)) #打印轮廓类型,这是个列表 print(type(h[1])) #查看轮廓数量 print (len

3K30
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

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

    样式提取方案 本文基于OpenCV-Python实现图像的样式检测,主要分为三步: 1. 从图片检测并分离组件区域; 2. 基于组件区域进行形状检测; 3. 对符合规则形状的组件进行样式计算。 1....代码实现 def extract(img, rect): """输入框选区,输出GrabCut遮罩""" x, y, w, h = rect roi_img = img[y:y+h, x:x...这里采用的是Canny边缘检测来得到图像边缘图,再通过Suzuki85算法cv2.findContours从图像边缘提取外轮廓。...rx - x - w / 2) < th) & (abs(ry - y - h / 2) < th) ) 通过这一步,我们筛选出属于矩形或圆形的组件,以及组件的宽高、圆形以及对应的半径...其中外轮廓的提取直接复用前面的cv2.findContours方法,输入色块,输出外轮廓填充图。

    1.3K30

    基于OpenCV修复表格缺失的轮廓--如何识别和修复表格识别中的虚线

    如果是整个文档,并且表格周围有文字,则需要首先识别该表格,然后从图像提取出表格的部分。...然后将这些框与四个值x,y,宽度,高度一起存储在列表框中。...= np.min(xs) min_y = np.min(ys) max_y = np.max(ys) max_x = np.max(xs) 现在使用存储的值来了解表的位置。...最小y值可用于获取表的最上一行,该行可以视为表的起点。x的最小值是表格的左边缘。要获得近似大小,我们需要检索最大y值,该值是表底部的单元格或行。最后一行的y值表示单元格的上边缘,而不是单元格的底部。...max_y: max_y_height = b[3] #Retrieve width where x is maximum (rightmost edge, last column of

    4.7K10

    基于OpenCV的特定区域提取

    今天我们将一起探究如何使用OpenCV和Python从图像中提取感兴趣区域(ROI)。 在之间的文章中,我们完成了图像边缘提取,例如从台球桌中提取桌边。...今天我们的任务是从包含患者大脑活动快照的图像中提取所需的片段。之后可以将该提取的过程应用于其他程序中,例如诊断健康与否的机器学习模型。 因此,让我们从查看输入图像开始。...现在,我们可以使用OpenCV函数“ findContours()”提取该图像中的轮廓,并仅选择具有以下属性的轮廓: 1. 几何形状是圆形或椭圆形 2....面积大于某个阈值(在此示例中,值7000可以正常工作)。 对于第一部分,我们将使用OpenCV的“ boundingRect()”检测每个轮廓的边界矩形,并检查纵横比(高宽比)是否接近1。...对段轮廓进行质心检测需要在轮廓上应用OpenCV “ moments()”函数,然后使用以下公式计算中心 X,Y坐标: center_x,center_y =(int(M [“ m10”] / M [”

    2.9K30

    基于OpenCV修复表格缺失的轮廓--如何识别和修复表格识别中的虚线

    如果是整个文档,并且表格周围有文字,则需要首先识别该表格,然后从图像提取出表格的部分。...然后将这些框与四个值x,y,宽度,高度一起存储在列表框中。...= np.min(xs)min_y = np.min(ys)max_y = np.max(ys)max_x = np.max(xs) 现在使用存储的值来了解表的位置。...最小y值可用于获取表的最上一行,该行可以视为表的起点。x的最小值是表格的左边缘。要获得近似大小,我们需要检索最大y值,该值是表底部的单元格或行。最后一行的y值表示单元格的上边缘,而不是单元格的底部。...: max_y_height = b[3]#Retrieve width where x is maximum (rightmost edge, last column of table)

    4.3K20

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

    今天我们将一起探究如何使用OpenCV和Python从图像中提取感兴趣区域(ROI)。 在之间的文章中,我们完成了图像边缘提取,例如从台球桌中提取桌边。...今天我们的任务是从包含患者大脑活动快照的图像中提取所需的片段。之后可以将该提取的过程应用于其他程序中,例如诊断健康与否的机器学习模型。 因此,让我们从查看输入图像开始。...现在,我们可以使用OpenCV函数“ findContours()”提取该图像中的轮廓,并仅选择具有以下属性的轮廓: 1. 几何形状是圆形或椭圆形 2....面积大于某个阈值(在此示例中,值7000可以正常工作)。 对于第一部分,我们将使用OpenCV的“ boundingRect()”检测每个轮廓的边界矩形,并检查纵横比(高宽比)是否接近1。...对段轮廓进行质心检测需要在轮廓上应用OpenCV “ moments()”函数,然后使用以下公式计算中心 X,Y坐标: center_x,center_y =(int(M [“ m10”] / M [”

    4.2K20

    讲解python图像边缘检测

    (blurred, cv2.CV_64F, 0, 1, ksize=3)# 计算梯度幅值和方向gradient_magnitude = cv2.magnitude(gradient_x, gradient_y...)gradient_direction = cv2.phase(gradient_x, gradient_y, angleInDegrees=True)非极大值抑制:在计算梯度幅值和方向之后,需要对图像进行非极大值抑制...pythonCopy code# 边缘连接edges = cv2.dilate(edges, None)示例代码下面是一个完整的示例代码,用于演示如何使用Python和OpenCV进行Canny边缘检测...然后,我们应用高斯滤波和Canny边缘检测算法来提取图像的边缘。接下来,我们使用轮廓检测函数cv2.findContours()找到边缘的轮廓,并将其绘制到原始图像上。...可以是一个整数,表示正方形核的边长,或者是一个(height, width)的元组表示矩形核的尺寸。尺寸必须是正奇数。sigmaX: X方向上的高斯核标准差。如果为0,则根据ksize自动计算。

    34410

    讲解opencv检测黑色区域

    讲解OpenCV检测黑色区域在计算机视觉和图像处理领域,OpenCV是一个强大而广泛使用的开源库,提供了丰富的图像处理和计算机视觉算法。本文将介绍如何使用OpenCV来检测并定位图像中的黑色区域。...y, w, h = cv2.boundingRect(contour) cv2.rectangle(image, (x, y), (x + w, y + h), (0, 0, 255), 2)显示结果图像...= y - slope * x # 计算车道线的起始点和结束点 y1 = image.shape[0] y2 = int(y1 * 0.6) x1 = int((y1...thresh:阈值,用于将像素值进行二分。根据不同的阈值类型,它可以是一个具体的阈值值或者是一个阈值范围。maxval:设置像素值大于或小于阈值时的输出值。...图像分割:根据不同的阈值,将图像分割成不同的区域,用于提取感兴趣的目标或区域。边缘检测:通过选择合适的阈值,可以提取出图像中的边缘特征,用于目标检测和图像分析。

    71410

    【图像配准】使用OpenCV进行多图配准拼接

    图像拼接创建步骤 通常来说,根据多个图像创建全景图的步骤为以下几步: 检测两张图像的关键点特征(DoG、Harris等) 计算不变特征描述符(SIFT、SURF或ORB等) 根据关键点特征和描述符...OpenCV实践 OpenCV提供了cv2.createStitcher (OpenCV 3.x) 和 cv2.Stitcher_create(OpenCV 4) 这个拼接函数接口,对于其背后的算法,尚未可知...y, w, h) = cv2.boundingRect(c) cv2.rectangle(mask, (x, y), (x + w, y + h), 255, -1)...y, w, h) = cv2.boundingRect(c) # 使用该范围坐标对原图进行裁剪 stitched = stitched[y:y + h, x:x +...[2]你相机里的全景图是如何实现的 https://zhuanlan.zhihu.com/p/83225676 [3]PyImageSearch学习笔记三(使用Opencv拼接全景地图二)https

    4K21

    OpenCV 轮廓检测

    ",result);  还要注意提取轮廓的方法还有很多种,比如CV_RETR_LIST代表所有轮廓 [cpp] view plain copy findContours(image, ...具体参考contours.c这个demo method为轮廓的近似办法 CV_CHAIN_APPROX_NONE存储所有的轮廓点,相邻的两个点的像素位置差不超过1,即max(abs(x1-x2),...abs(y2-y1))==1 CV_CHAIN_APPROX_SIMPLE压缩水平方向,垂直方向,对角线方向的元素,只保留该方向的终点坐标,例如一个矩形轮廓只需4个点来保存轮廓信息 CV_CHAIN_APPROX_TC89...findContours后会对输入的2值图像改变,所以如果不想改变该2值图像,需创建新mat来存放,findContours后的轮廓信息contours可能过于复杂不平滑,可以用approxPolyDP...= m10 / m00,y = m01 / m00。

    86420

    OpenCV玩九宫格数独(一):九宫格图片中提取数字

    要得到实实在在的数字,我们需要做的是对图片上的数字进行提取和识别。本文先说第一步,图片中数字的提取。 在一年之前,我曾用 C++ 尝试过 opencv 解数独,但由于当时水平有限,未能完成。...2.本次所用方法 在仔细研究了 opencv 轮廓提取函数findContours()之后,发现利用轮廓的层级结构会更加简单。作为本节最主要的函数,有必要稍微多说几句。...别忘了我们本节的目的是要提取数字,什么样的轮廓包含数字? 一般来说经过前面的阈值分割得到二值图像,然后从二值图像中提取的轮廓是这样的。...= -1: x,y,w,h = cv2.boundingRect(contours[boxes[j][2]]) number_boxes.append([x,y,w,h]...) number_boxes.append([x,y,w,h]) img = cv2.rectangle(img,(x-1,y-1),(x+w+1,y+h+1),(0,0,255

    6.5K20

    OpenCV与图像处理(二)

    本章节的主要内容是图像分割,包括以下几点内容: 1、阈值二值化 2、Canny算子 3、Sobel算子 4、Laplace算子 以下代码均在python3.6,opencv4.2.0环境下试了跑一遍,可直接运行...---- 1、阈值二值化 阈值二值化,就是将图像上的像素点的灰度值设置为0或255,也就是将整个图像呈现出明显的只有黑和白的视觉效果。灰度值0:黑,灰度值255:白。...(threshold_binary,cv2.RETR_EXTERNAL,cv2.CHAIN_APPROX_SIMPLE) #提取轮廓 contours = h[0] #打印返回值,这是一个元组 print...(cannyImg,cv2.RETR_TREE,cv2.CHAIN_APPROX_NONE) #提取轮廓 contours = h[0] #打印返回值,这是一个元组 print(type(h)) #打印轮廓类型...sobelx_img = cv2.convertScaleAbs(x) # sobel 竖直方向边缘检测 y = cv2.Sobel(gray,cv2.CV_16S,0,1,ksize=3) # 将像素点进行绝对值计算

    67520

    OpenCV系列之轮廓入门 | 二十一

    你将看到以下功能:cv.findContours(),cv.drawContours() 什么是轮廓? 轮廓可以简单地解释为连接具有相同颜色或强度的所有连续点(沿边界)的曲线。...因此,在找到轮廓之前,请应用阈值或canny边缘检测。 从OpenCV 3.2开始,findContours()不再修改源图像。 在OpenCV中,找到轮廓就像从黑色背景中找到白色物体。...让我们看看如何找到二进制图像的轮廓: import numpy as np import cv2 as cv im = cv.imread('test.jpg') imgray = cv.cvtColor...每个单独的轮廓是一个(x,y)坐标的Numpy数组的边界点的对象。 注意 稍后我们将详细讨论第二和第三个参数以及有关层次结构。在此之前,代码示例中赋予它们的值将适用于所有图像。 如何绘制轮廓?...轮廓近似方法 这是cv.findContours函数中的第三个参数。它实际上表示什么? 上面我们告诉我们轮廓是强度相同的形状的边界。它存储形状边界的(x,y)坐标。但是它存储所有坐标吗?

    73010

    【深度学习】实例第二部分:OpenCV

    从图片中提取特定颜色 import cv2 import numpy as np im = cv2.imread(".....因此,对象必须是白色的,背景必须是黑色的 在OpenCV 4.x中,函数cv2.findContours()仅有两个返回值 绘制轮廓:drawContours函数 语法格式:image=cv2.drawContours...:是灰度图像或轮廓 返回值: retval:表示返回的矩形边界的左上角顶点的坐标值及矩形边界的宽度和高度 x, y, w, h: 矩形边界左上角顶点的x坐标、y坐标、宽度、高度 """ 代码: #...y, w, h = cv2.boundingRect(contours[0]) # 计算矩形包围框的x,y,w,h print("x:", x, "y:", y, "w:", w, "h:", h)...# 绘制矩形包围框 brcnt = np.array([[[x, y]], [[x + w, y]], [[x + w, y + h]], [[x, y + h]]]) cv2.drawContours

    1.8K10

    python 基于opencv 绘制图像轮廓

    这篇文章主要介绍了python 基于opencv 绘制图像轮廓的示例,帮助大家更好的利用python的opencv库处理图像,感兴趣的朋友可以了解下 图像轮廓概念 轮廓是一系列相连的点组成的曲线,代表了物体的基本外形...寻找轮廓的操作一般用于二值图像,所以通常会使用阈值分割或Canny边缘检测先得到二值图。...opencv找出图像轮廓 使用cv.findContours()寻找轮廓: import cv2 as cvimport numpy as np img = cv.imread('j.png')img_gray...)) 参数2:轮廓的查找方式,一般使用cv.RETR_TREE,表示提取所有的轮廓并建立轮廓间的层级。...函数有2个返回值,hierarchy是轮廓间的层级关系,这个不用理会。我们主要看contours,它就是找到的轮廓了,以链表形式存储,记录了每条轮廓的所有像素点的坐标(x,y)。 ?

    2K11
    领券