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

使用cv2 findContours时,图像中的轮廓看起来非常粗糙。如何改进?

使用cv2.findContours函数找到图像中的轮廓时,可以通过以下方法改进轮廓的粗糙程度:

  1. 图像预处理:在使用findContours函数之前,可以对图像进行预处理,例如使用高斯滤波器平滑图像,或者进行图像二值化处理,以减少噪声和细节对轮廓检测的影响。
  2. 轮廓近似:使用cv2.approxPolyDP函数对轮廓进行多边形近似,可以将轮廓的边缘平滑化,从而减少粗糙度。该函数可以指定一个近似精度参数,通过调整该参数的值可以控制近似的程度。
  3. 轮廓滤波:可以根据轮廓的面积、周长、形状等特征进行滤波操作,去除不符合条件的轮廓。例如可以使用cv2.contourArea函数计算轮廓的面积,然后根据设定的阈值进行筛选。
  4. 轮廓细化:可以使用形态学操作,如腐蚀和膨胀,对轮廓进行细化处理。腐蚀操作可以减小轮廓的大小,膨胀操作可以增加轮廓的大小,通过适当的组合可以调整轮廓的粗细。
  5. 轮廓描边:可以使用cv2.drawContours函数将轮廓描绘在原始图像上,通过调整描绘的参数,如线宽、颜色等,可以改变轮廓的显示效果。

总结起来,改进轮廓的粗糙度可以通过图像预处理、轮廓近似、轮廓滤波、轮廓细化和轮廓描边等方法实现。具体的方法选择和参数调整需要根据具体情况进行调试和优化。

腾讯云相关产品和产品介绍链接地址:

  • 图像处理:https://cloud.tencent.com/product/tci
  • 人工智能:https://cloud.tencent.com/product/ai
  • 视频处理:https://cloud.tencent.com/product/vod
  • 数据库:https://cloud.tencent.com/product/cdb
  • 云原生:https://cloud.tencent.com/product/tke
  • 服务器运维:https://cloud.tencent.com/product/cvm
  • 存储:https://cloud.tencent.com/product/cos
  • 区块链:https://cloud.tencent.com/product/baas
  • 物联网:https://cloud.tencent.com/product/iotexplorer
  • 移动开发:https://cloud.tencent.com/product/mab
  • 网络安全:https://cloud.tencent.com/product/ssm
  • 音视频:https://cloud.tencent.com/product/vod
页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

opencv(4.5.3)-python(二十一)--轮廓更多功能

翻译及二次校对:cvtutorials.com 目标 在本章,我们将了解到: 1. 凸性缺陷以及如何找到它们。 2. 寻找从一个点到一个多边形最短距离 3. 匹配不同形状 理论和代码 1....一个基本函数调用看起来如下。...点多边形测试 这个函数找出图像一个点和一个轮廓线之间最短距离。它返回距离是:当点在轮廓线外为负数,当点在轮廓线内为正数,如果点在轮廓线上则为零。...文档解释了不同测量方法。...轮廓线边缘用白色标记。所以问题很简单。写一段代码来创建这样距离表示。 2. 用cv.matchShapes()比较数字或字母图像。( 这将是走向OCR一个简单步骤)

30120

python-opencv2利用cv2.findContours()函数来查找检测物体轮廓

OpenCV-Python接口中使用cv2.findContours()函数来查找检测物体轮廓。 实现 使用方式如下: import cv2 img = cv2.imread("....注:opencv3会返回三个值,分别是img, countours, hierarchy 参数 第一个参数是寻找轮廓图像; 第二个参数表示轮廓检索模式,有四种(本文介绍都是新cv2接口):...contour返回值 cv2.findContours()函数首先返回一个list,list每个元素都是图像一个轮廓,用numpyndarray表示。这个概念非常重要。...轮廓绘制 OpenCV通过cv2.drawContours在图像上绘制轮廓。...3,也就是说这个函数实际上返回了三个值 第一个,也是最坑爹一个,它返回了你所处理图像 第二个,正是我们要找轮廓点集 第三个,各层轮廓索引 使用方式如下: import cv2

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

    以下是一个使用轮廓匹配示例代码: import cv2 # 读取参考轮廓图像 reference_contour = cv2.imread('reference_contour.jpg', cv2....这个示例将加载参考轮廓图像和目标图像,并通过边缘检测和轮廓匹配判断目标是否存在。 3.2 形状分析 使用轮廓特征可以进行形状分析,比如判断轮廓形状类别或测量形状尺寸。...总结 通过本文介绍,你已经了解了使用 OpenCV 进行轮廓特征提取和轮廓匹配基本步骤。...你学会了使用 findContours 函数寻找轮廓,并通过计算轮廓形状、面积、周长等特征进行轮廓匹配和形状分析。 轮廓特征和轮廓匹配是图像处理中常用技术,可以应用于目标识别、形状分析等多个领域。...通过提取轮廓特征并比较轮廓之间相似度,我们可以实现对图像目标区域定量分析和比较。 祝你在使用 OpenCV 进行轮廓特征和轮廓匹配过程取得成功!

    3.9K10

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

    轮廓可以简单地解释为连接具有相同颜色或强度所有连续点(沿边界)曲线。轮廓是用于形状分析以及对象检测和识别的有用工具。 为了获得更高准确性,请使用二进制图像。...因此,在找到轮廓之前,请应用阈值或canny边缘检测。 从OpenCV 3.2开始,findContours()不再修改源图像。 在OpenCV,找到轮廓就像从黑色背景中找到白色物体。...让我们看看如何找到二进制图像轮廓: import numpy as np import cv2 as cv im = cv.imread('test.jpg') imgray = cv.cvtColor...在此之前,代码示例赋予它们值将适用于所有图像如何绘制轮廓? 要绘制轮廓,请使用cv.drawContours函数。只要有边界点,它也可以用来绘制任何形状。...轮廓近似方法 这是cv.findContours函数第三个参数。它实际上表示什么? 上面我们告诉我们轮廓是强度相同形状边界。它存储形状边界(x,y)坐标。但是它存储所有坐标吗?

    72610

    OpenCV 入门教程:寻找和绘制轮廓

    本文将以寻找和绘制轮廓为中心,为你介绍使用 OpenCV 进行轮廓处理基本步骤和实例。 ❤️ ❤️ ❤️ 一、寻找轮廓 寻找轮廓是通过边缘检测和形态学操作,将图像目标区域边界提取出来。...以下是一个使用寻找轮廓示例代码: import cv2 # 读取图像文件 image = cv2.imread('image.jpg') # 将图像转换为灰度图像 gray_image = cv2...接下来,使用 findContours 函数寻找图像轮廓。 RETR_EXTERNAL 参数表示只检测外部轮廓, CHAIN_APPROX_SIMPLE 参数表示简化轮廓表示方式。...以下是一个使用绘制轮廓示例代码: import cv2 # 读取图像文件 image = cv2.imread('image.jpg') # 将图像转换为灰度图像 gray_image = cv2...你学会了使用边缘检测和 findContours 函数寻找图像轮廓,并使用 drawContours 函数绘制轮廓

    55920

    opencv可以有多有趣

    先把视频的人物边缘找出来,然后再在一张白色底板上绘制出来,再配以rgb变化,会是什么样! 来试试吧 内容 首先我们需要一个有人物视频,建议使用哪些人物和背景区分度比较高视频。...我么想要完成功能就是在视频把一个人轮廓画出来,然后随着视频一起播放。 接下来就可以聊聊解决思路了。...第一步其实先把图像给整成灰度图,直接使用opencvcvtColor函数即可 接下来为了方便提取人物轮廓,我们需要做一下二值处理,这里使用函数是threshold,这个函数中会设置一个阈值,当像素值超过这个阈值...,会直接将像素值设置为我们预定像素值,当小于阈值,则会将像素值设置为0,这样就可以得到一个二值图像。...edged = cv2.Canny(thresh, 75, 150) # 获取所有的轮廓,这里没有在进行处理,有兴趣可以提取出需要 cnts = cv2.findContours

    13610

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

    图像轮廓图像非常重要一个特征信息,通过对图像轮廓操作,我们能够获取目标图像大小、位置、方向等信息。一个轮廓对应着一系列点,这些点以某种方式表示图像一条曲线。...返回值 image:与函数参数原始图像image一致 contours:返回轮廓。...灰度图像会被自动处理为二值图像。在实际操作,可以根据需要,预先使用阈值处理等函数将待查找轮廓图像处理为二值图像。..._KCOS 使用teh-Chinl chain近似算法一种风格 注意事项 待处理图像必须是灰度二值图 都是从黑色背景查找白色对象。...因此,对象必须是白色,背景必须是黑色 在OpenCV 4.x,函数cv2.findContours()仅有两个返回值 绘制轮廓:drawContours函数 语法格式:image=cv2.drawContours

    1.8K10

    python 基于opencv 绘制图像轮廓

    其实边缘主要是作为图像特征使用,比如可以用边缘特征可以区分脸和手;而轮廓主要用来分析物体形态,比如物体周长和面积等,可以说边缘包括轮廓。 ?...寻找轮廓操作一般用于二值图像,所以通常会使用阈值分割或Canny边缘检测先得到二值图。...opencv找出图像轮廓 使用cv.findContours()寻找轮廓: import cv2 as cvimport numpy as np img = cv.imread('j.png')img_gray...)) 参数2:轮廓查找方式,一般使用cv.RETR_TREE,表示提取所有的轮廓并建立轮廓层级。...经验之谈:很多人画图明明用了彩色,但没有效果,请检查你是在哪个图上画,画在灰度图和二值图上显然是没有彩色

    2K11

    opencv(4.5.3)-python(十八)--轮廓线入门

    轮廓线是形状分析和物体检测与识别的一个有用工具。 • 为了获得更好准确性,使用二进制图像。因此,在寻找轮廓线之前,应用阈值或Canny边缘检测。...• 从OpenCV 3.2开始,findContours()不再修改源图像了。 • 在OpenCV,寻找轮廓线就像从黑色背景寻找白色物体。所以请记住,要找到物体应该是白色,背景应该是黑色。...让我们来看看如何找到二进制图像轮廓线。...在那之前,代码样本给它们值对所有的图像都能正常工作。 如何绘制轮廓线? 为了绘制轮廓线,我们使用了cv.drawContours函数。它也可以用来绘制任何形状,只要你有它边界点。...它第一个参数是源图像,第二个参数是轮廓线,应该以Python列表形式传递,第三个参数是轮廓线索引(在绘制单个轮廓线很有用。 要绘制所有轮廓线,传递-1),其余参数是颜色、厚度等。

    64720

    python 生成任意形状凸包图代码

    /凸包/外接矩形/外接圆/拟合矩形/拟合直线/拟合圆 Contour Features 1 图像矩 cv2.moments() 图像矩可以帮助计算物体某些特征,如对象质心,对象区域等....下面,在第二幅图像,绿线表示epsilon =弧长10%近似曲线. 第三幅图像显示相同epsilon =弧长1%....5凸包 凸包看起来类似轮廓近似,但是它不是(两者在某些情况下可能提供相同结果). convexHull(points[, hull[, clockwise[, returnPoints]]]):检查曲线凸性缺陷并进行修正...; 如果为False,则返回与hull points对应轮廓索引 下面的手形图像....如果想找到凸性缺陷,需要传递returnPoints = False,得到以下结果: array([[129], [ 67], [ 0], [142]], dtype=int32) 这些是轮廓相应点索引

    2.4K20

    OpenCV图像处理(十五)---图像轮廓特征

    热力学第三定律是热力学四条基本定律之一,其描述是热力学系统熵在温度趋近于绝对零度趋于定值。而对于完整晶体,这个定值为零。...前言 在上一期文章,我们学习了图像边缘检测知识,了解到边缘检测实际就是检测图像亮度变化有区别或者较大地方,实际效果表现为图像轮廓检测。...今天,我们继续来学习图像新知识--轮廓特征。 一、检测并绘制轮廓方法 轮廓检测是图像处理中常用方法。...OpenCV中使用cv2.findContours()函数来查找检测物体轮廓,一起来看看吧。...1.1 原始图像 (各式各样形状) 1.2 代码实践 1)首先我们来寻找轮廓,然后将轮廓进行描红 # 首先我们来寻找轮廓,然后将轮廓进行描红 import cv2

    37310

    opencv 实现特定颜色线条提取与定位操作

    之间值变成255 二值化 腐蚀与膨胀操作,去除噪点,连接断点 调用findContours函数进行轮廓检测 cv2.findContours()函数接受参数为二值图,即黑白(不是灰度图) cv2....findContours(image, mode, method[, contours[, hierarchy[, offset ]]]) 参数解析 第一个参数是寻找轮廓图像; 第二个参数表示轮廓检索模式...,有四种(本文介绍都是新cv2接口): cv2.RETR_EXTERNAL表示只检测外轮廓 cv2.RETR_LIST检测轮廓不建立等级关系 cv2.RETR_CCOMP建立两个等级轮廓,上面的一层为外边界..._KCOS使用teh-Chinl chain 近似算法 返回值 cv2.findContours()函数返回三个值,一个是图像,一个是轮廓本身,还有一个是每条轮廓对应属性。...对于轮廓是以坐标的形式返回,可以通过函数cv2.drawContours()绘制出轮廓 绘制矩形区域对轮廓进行定位 主要代码如下: import numpy as np import cv2 import

    4.3K10

    OpenCV学习+常用函数记录③:霍夫变换与轮廓提取

    霍夫圆形检测 def hough_circle(gray_img): # 定义检测图像方法。...轮廓提取 基于图像边缘提取或二值化基础寻找对象轮廓 边缘提取阈值会最终影响轮廓发现结果 主要API有以下两个 findContours 发现轮廓 drawContours 绘制轮廓 4.1...查找轮廓 处理图像, 轮廓列表, 继承关系 = cv.findContours(图像, 轮廓检索模式, 轮廓检索算法) # hierarchy[i][3],分别表示第i个轮廓后一个轮廓、前一个轮廓...读取图片 将图片转成一张灰色图片 对图片进行二值化处理 使用findContours查找轮廓轮廓进行处理 import cv2 as cv # 1....使用findContours查找轮廓 def getContours(img): _, contours, hierarchy = cv.findContours(img, cv.RETR_TREE

    93910

    opencv 图像轮廓实现示例

    2.查找轮廓需要更改原始图像,通常使用原始图像一份进行拷贝。 3.在opencv里,是从黑色背景里找白色。因此对象必须是白色,背景为黑色。...类型,因此这里将找到 # 轮廓所有的点存放在一个列表,然后使用这个列表创建数组 point_list=[] for i in contour: for j in i: point_list.append...函数参数要求是ndarray类型,因此这里将找到 # 轮廓所有的点存放在一个列表,然后使用这个列表创建数组 point_list=[] for i in contour: for j in...图像掩模和像素点 有时我们需要构成对象所有像素点,我们可以将图像所有轮廓提取出来,然后使用函数cv.drawContours()将轮廓区域填充为指定颜色。...NonZeroPoints=NonZeroPoints.reshape((-1,2)) #验证我们提取出来像素点坐标是否正确,我们使用变量 #column和row分别存放非零像素点在图像坐标的列数和行数

    1.4K31

    笔记分享 : OpenCV常用边缘检测算法

    import cv2 import numpy as np from scipy import ndimage # 提供了基础图像处理功能 # 3x3卷积核,卷积核里参数或权重加起来等于0 kernel...高斯滤波具体操作是:用一个模板(或称卷积、掩模)扫描图像每一个像素,用模板确定邻域内像素加权平均灰度值去替代模板中心像素点值。 Canny 边缘检测算法(使用比较频繁) 1...., method[, contours[, hierarchy[, offset ]]]) 参数: 第一个参数是寻找轮廓图像; 第二个参数表示轮廓检索模式,有四种(本文介绍都是新cv2接口..._L1,CV_CHAIN_APPROX_TC89_KCOS 使用teh-Chinl chain 近似算法 返回值 cv2.findContours()函数返回两个值,一个是轮廓本身,还有一个是每条轮廓对应属性...;image为三通道才能显示轮廓 第二个参数是轮廓本身,在Python是一个list; 第三个参数指定绘制轮廓list哪条轮廓,如果是-1,则绘制其中所有轮廓

    1.3K40

    OpenCV与图像处理(二)

    ---- 1、阈值二值化 阈值二值化,就是将图像像素点灰度值设置为0或255,也就是将整个图像呈现出明显只有黑和白视觉效果。灰度值0:黑,灰度值255:白。...阈值分割方法核心在于如何寻找适当阈值。最常用阈值方法是基于灰度直方图方法,如最大类间方差法(OTSU)、最小误差法、最大熵法等,直方图表示图像具有每种灰度级像素个数。...(contours)) # 在二值图像上画出轮廓:threshold_binary是二值图像,contours是轮廓,-1表示全画,然后是颜色,厚度 cv2.drawContours(img,contours...h = cv2.findContours(cannyImg,cv2.RETR_TREE,cv2.CHAIN_APPROX_NONE) #提取轮廓 contours = h[0] #打印返回值,这是一个元组...对噪声具有平滑作用,提供较为精确边缘方向信息,边缘定位精度不够高。当对精度要求不是很高,是一种较为常用边缘检测方法。

    64520

    【python opencv】轮廓更多属性

    凸性缺陷 我们看到了关于轮廓第二章凸包。从这个凸包上任何偏差都可以被认为是凸性缺陷。 OpenCV有一个函数来找到这个,cv.convexityDefects()。...所以我们必须从cnt获取这些值。...点多边形测试 这个函数找出图像中一点到轮廓线最短距离。它返回距离,点在轮廓线外为负,点在轮廓线内为正,点在轮廓线上为零。...我得到以下结果: - 匹配图像A与本身= 0.0 - 匹配图像A与图像B = 0.001946 - 匹配图像A与图像C = 0.326911 看,即使是图像旋转也不会对这个比较产生很大影响。...参考 Hu矩是平移、旋转和比例不变七个矩。第七个是无偏斜量。这些值可以使用cpu.HuMoments()函数找到。 对轮廓这些属性暂时不是很感兴趣,就直接摘抄下来了。

    64320

    opencv3编程入门_java基础与入门教程

    5、边缘检测 边缘检测不管是在人类视觉还是计算机视觉中都是非常重要,我们能识别物体,就是靠边缘。这个很容易理解,夜晚很黑什么都看不到,不就是因为没看到物体边缘吗?...用cv2.findContours函数很容易实现上述功能。...(), cv2.COLOR_BGR2GRAY), 127, 255, cv2.THRESH_BINARY) #检测轮廓, #输入三个参数分别为:输入图像、层次类型、轮廓逼近方法 #因为这个函数会修改输入图像...,所以上面的步骤使用copy函数将原图像做一份拷贝,再处理 #返回三个返回值分别为:修改后图像、图轮廓、层次 image, contours, hier = cv2.findContours(thresh...,无奈电脑没有摄像头,已经在淘宝了,后续实例再补了。

    54730
    领券