首页
学习
活动
专区
圈层
工具
发布
    • 综合排序
    • 最热优先
    • 最新优先
    时间不限
  • 来自专栏又见苍岚

    OpenCV 轮廓 —— 轮廓查找

    OpenCV 中用一系列二维顶点表示一个轮廓 函数 cv2.findContours() 从二维图像中计算轮廓。 特别要注意轮廓树的概念,这对于理解其中一种最有效的方法cv2.findContours()非常重要。 上图为一张输入cv2.findContours()函数的测试图像(左图)。 在右下角的图中(对应构筑的轮廓树),每一个节点就是一条轮廓。根据每个节点在层次队列中的四元数组索引,图中的链接都做了相应标记。 cv2.findContours 找出二值图中的轮廓。 绘制轮廓可以用cv2.drawContours()函数完成。 cv2.drawContours 绘制等高线轮廓或填充等高线。 如果为 1,则函数绘制轮廓和所有嵌套轮廓。 如果为 2,则函数绘制轮廓、所有嵌套轮廓、所有嵌套到嵌套的轮廓,依此类推。仅当存在可用层次结构时才考虑此参数。

    4.1K20编辑于 2022-08-09
  • 来自专栏又见苍岚

    OpenCV 轮廓 —— 轮廓分析

    当分析一张图像的时候,针对轮廓,我们也许有很多事情要做。毕竟,所有轮廓都是或即将是我们想要进行识别或操作的。另外相关的还有多种对轮廓的处理,如描述轮廓,简化或拟合轮廓,匹配轮廓到模板,等等。 res1, res2) --> 1209 14 几何及特性概括 轮廓处理中经常遇到的另一个任务是计算一些轮廓变化的概括特性。 cv2.arcLength 计算轮廓周长或曲线长度。 当然,长度和面积只是轮廓的简单特性。描述轮廓的一种最简易的方法是为它加上一个外包围框。最简单的途径是直接计算外包围矩形。这正是 cv2.boundingRect 函数做的。 而函数cv2.minAreaRect可以返回一个包围轮廓最小的矩形,这个矩形很可能是倾斜的。 查找包含输入 2D 点集的最小区域的旋转矩形。

    4.1K20编辑于 2022-08-09
  • 来自专栏又见苍岚

    OpenCV 轮廓 —— 轮廓匹配

    一个跟轮廓相关的最常用到的功能是如何匹配多条轮廓。我们或许需要比较两条计算好的轮廓,或者比较一条轮廓和一个抽象模板。这两种情况都会在本文讨论。 矩 相关介绍 比较两条轮廓最简洁的方法之一是比较它们的轮廓矩。轮廓矩代表了一条轮廓、一幅图像、一组点集的某些高级特征。下面的所有讨论对轮廓、图像、点集都同样适用,简便起见,将它们统称为对象。 当处理轮廓时,结果是轮廓的长度。 将m_{10}和m_{01}相加再除以mo,能得到整个对象的平均x值和y值。 cv2.moments 计算多边形或光栅化形状的所有矩,最高可达三阶。 官方文档 函数使用 cv2.matchShapes( contour1, # 第一个轮廓或灰度图像。 contour2, # 第二轮廓或灰度图像。 score {format(match_res2, '.3f')}"]) 利用形状场景方法比较轮廓 OpenCV 努力提供比矩匹配更好的形状匹配算法 https://docs.opencv.org

    4.3K30编辑于 2022-08-09
  • 来自专栏iSharkFly

    Mockito 2 关于打(stubbing)

    (Stubbing)可以被重写:例如一个通用的打可以在启动的时候被确定(fixture),但是测试方法可以对其进行重写(override)。 请注意重写的打可能会在有很多标记的时候存在潜在的问题。 一旦被打,方法将会总是返回已标记的内容,这个与这个方法被调用多少次无关。 最后的标记非常重要——当你对有相同参数的方法进行多次标记的时候。 这是因为在测试代码运行的时候,我们尝试输出 mockedList.get(1),这个在测试的时候,因为我们打为抛出异常,所以这一句话将会在测试代码中抛出异常。

    86930发布于 2019-09-18
  • 【OpenCV 轮廓检测与轮廓筛选】

    调用cv2.findContours()检测轮廓 该函数返回轮廓的坐标点和层级关系。 :轮廓检索模式: cv2.RETR_EXTERNAL:仅检测外部轮廓。 cv2.RETR_TREE:检测所有轮廓并建立层级树。 method:轮廓近似方法: cv2.CHAIN_APPROX_SIMPLE:压缩冗余点,节省内存。 cv2.CHAIN_APPROX_NONE:保留所有轮廓点。 二、轮廓筛选(Contour Filtering) 1. 基于面积筛选 过滤掉面积过小或过大的轮廓轮廓断裂 解决方法:膨胀操作连接边缘。 dilated = cv2.dilate(edges, kernel, iterations=2) 3.

    28510编辑于 2026-01-23
  • 来自专栏图像处理与模式识别研究所

    轮廓面积

    contours,hierarchy=cv2.findContours(binary,cv2.RETR_LIST,cv2.CHAIN_APPROX_SIMPLE)#计算图像轮廓 cv2.imshow( [i]=cv2.drawContours(contoursImg[i],contours,i,(255,255,255),3)#绘制图像轮廓 cv2.imshow("contours[" + str(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是绝对值 注意:轮廓面积的单位是像素。

    62520编辑于 2022-05-28
  • 来自专栏图像处理与模式识别研究所

    实心轮廓

    ",o) gray=cv2.cvtColor(o,cv2.COLOR_BGR2GRAY)#将彩色图片转换为灰度图片 ret,binary=cv2.threshold(gray,127,255,cv2.THRESH_BINARY )#将灰度图片转换为二值图片 contours,hierarchy=cv2.findContours(binary,cv2.RETR_LIST,cv2.CHAIN_APPROX_SIMPLE)#计算图像轮廓 drawContours(mask,[cnt],0,255,-1)#绘制图像空心轮廓 pixelpoints=cv2.findNonZero(mask)#计算位置信息 print("pixelpoints.shape [115 225] [115 226] [115 227]] 算法:实心轮廓是通过获取特定对象的掩模图像及其对应的像素点位置信息来获取实心轮廓,应用在图像噪声消除等领域。 函数cv2.drawContours()的轮廓宽度参数thickness设置不为-1,即获取图像的空心轮廓

    73120编辑于 2022-05-28
  • 来自专栏图像处理与模式识别研究所

    空心轮廓

    ",o) gray=cv2.cvtColor(o,cv2.COLOR_BGR2GRAY)#将彩色图片转换为灰度图片 ret,binary=cv2.threshold(gray,127,255,cv2.THRESH_BINARY )#将灰度图片转换为二值图片 contours,hierarchy=cv2.findContours(binary,cv2.RETR_LIST,cv2.CHAIN_APPROX_SIMPLE)#计算图像轮廓 drawContours(mask,[cnt],0,255,2)#绘制图像空心轮廓 pixelpoints=np.transpose(np.nonzero(mask))#计算位置信息 print("pixelpoints.shape [115 225] [115 226] [115 227]] 算法:空心轮廓是通过获取特定对象的掩模图像及其对应的像素点位置信息来获取空心轮廓,应用在图像噪声消除等领域。 函数cv2.drawContours()的轮廓宽度参数thickness设置为-1,即获取图像的实心轮廓

    66720编辑于 2022-05-28
  • 来自专栏小鹏的专栏

    python下使用cv2.drawContours填充轮廓颜色

    在使用cv2.drawContours进行轮廓的颜色填充时要注意一点: (1)颜色填充时:给其传参数的时候,需要搞一个轮廓的list给他,要不会导致颜色填充失败。 (2)画轮廓线时:就没必要搞list了,直接contours[i]就可以。 python代码: 图片:背景为黑色,有很多白色填充的。 下面代码是去除图片中自定义面积小的轮廓, 将大的轮廓填充为白色。 # 处理掉小的轮廓区域,这个区域的大小自己定义。 if(area < (h/10*w/10)): c_min = [] c_min.append(cnt) # thickness不为-1时,表示画轮廓线, .imshow('mask',img) cv2.waitKey(0) 下面代码是只保留最大轮廓,填充为白色。

    17.5K90发布于 2018-01-09
  • 来自专栏图像处理与模式识别研究所

    图像轮廓

    )#将灰度图片转换为二值图片 contours,hierarchy=cv2.findContours(binary,cv2.RETR_LIST,cv2.CHAIN_APPROX_SIMPLE)#计算图像轮廓 mask=np.zeros(o.shape,np.uint8) mask=cv2.drawContours(mask,contours,-1,(255,255,255),-1)#绘制图像轮廓 cv2. 外部的轮廓为父轮廓,内部的轮廓为子轮廓,按照上述关系分类,一幅图像中所有轮廓之间就建立了父子关系。 首先读取图像 彩色图片转换为灰度图片 灰度图片转换为二值图片 检测二值图像边缘 绘制图像轮廓边缘 contours, hierarchy=cv2.findContours(image, mode, method ) image表示输入图像 mode表示图像轮廓的检索模式 method表示图像轮廓的近似方法 image=cv2.drawContours(image, contours, contourIdx,

    62110编辑于 2022-05-28
  • 来自专栏CodecWang

    13: 轮廓

    目标 了解轮廓概念 寻找并绘制轮廓 OpenCV函数:cv2.findContours(), cv2.drawContours() 教程 啥叫轮廓 轮廓是一系列相连的点组成的曲线,代表了物体的基本外形。 寻找轮廓 使用cv2.findContours()寻找轮廓: import cv2 img = cv2.imread('handwriting.jpg') img_gray = cv2.cvtColor ) print(len(contours)) # 结果应该为2Copy to clipboardErrorCopied 参数2轮廓的查找方式,一般使用cv2.RETR_TREE,表示提取所有的轮廓并建立轮廓间的层级 绘制轮廓 轮廓找出来后,为了方便观看,可以像前面图中那样用红色画出来:cv2.drawContours() cv2.drawContours(img, contours, -1, (0, 0, 255) to clipboardErrorCopied 小结 轮廓特征非常有用,使用cv2.findContours()寻找轮廓,cv2.drawContours()绘制轮廓

    61810编辑于 2021-12-07
  • 来自专栏图像处理与模式识别研究所

    轮廓测量

    contours,hierarchy=cv2.findContours(thresh,2,1)#计算图像轮廓 for cnt in contours: hull=cv2.convexHull( ,(300,150),True)#点A到轮廓的距离 font=cv2.FONT_HERSHEY_SIMPLEX cv2.putText(gray,'A',(300,100),font,1,(0,255,0 ),3) print("distA=",distA) distB=cv2.pointPolygonTest(hull,(300,250),True)#点B到轮廓的距离 font=cv2.FONT_HERSHEY_SIMPLEX hull,(300,250),True)#点C到轮廓的距离 font=cv2.FONT_HERSHEY_SIMPLEX cv2.putText(gray,'C',(300,300),font,1,(0,255,0 如果点在轮廓的外部,返回值为-1;如果点在轮廓上,返回值为0;如果点在轮廓内部,返回值为1

    87020编辑于 2022-05-28
  • 来自专栏深度学习与计算机视觉

    OpenCV 内轮廓与外轮廓说明

    : CV_RETR_EXTERNAL只检测最外围轮廓,包含在外围轮廓内的内围轮廓被忽略 CV_RETR_LIST 检测所有的轮廓,包括内围、外围轮廓,但是检测到的轮廓不建立等级关系,彼此之间独立,没有等级关系 ,这就意味着这个检索模式下不存在父轮廓或内嵌轮廓,所以hierarchy向量内所有元素的第3、第4个分量都会被置为-1 CV_RETR_CCOMP 检测所有的轮廓,但所有轮廓只建立两个等级关系,外围为顶层 ,若外围内的内围轮廓还包含了其他的轮廓信息,则内围内的所有轮廓均归属于顶层 CV_RETR_TREE, 检测所有轮廓,所有轮廓建立一个等级树结构。 外层轮廓包含内层轮廓,内层轮廓还可以继续包含内嵌轮廓。 用CV_RETR_TREE效果 此时找到的所有轮廓

    1.1K20编辑于 2022-05-07
  • 来自专栏从零开始学 Web 前端

    轮廓属性outline

    轮廓属性outline outline属性是用来设置一个或多个单独的轮廓属性的简写属性 , 例如 。 { outline: 10px solid red; } 轮廓的特点 轮廓不占据空间,它们被描绘于内容之上。 可以做到下图的效果: 我发现,当设置 outline-offset 为负值的时候,轮廓会出现在div的内部,如果继续扩大其负值,最终轮廓会收缩成一个“➕”加号,正好可以作为文件上传样式中间的加号。 : 100px; height: 100px; outline: 15px solid #545454; outline-offset: -66px; border: 2px solid #545454; } outline-offset: -66px; 是关键,它表示轮廓距div边的距离,如果为负值则会往里面收缩,最后形成一个加号。

    56510编辑于 2022-11-28
  • 来自专栏图像处理与模式识别研究所

    轮廓内核处理

    import cv2 import imageio import numpy as np import matplotlib.pyplot as plt from skimage import color from skimage import exposure from scipy.signal import convolve2d img=cv2.imread('C:/Users/xpp/Desktop /Lena.png') img=color.rgb2gray(img) sharpen_kernel=np.array([[0,-1,0], [-1,5 np.array([[-1,-1,-1], [-1,8,-1], [-1,-1,-1]]) edges=convolve2d plt.figure(figsize=(5,5)) plt.imshow(denoised_equalized, cmap='gray') plt.axis('off') plt.show() 算法:轮廓内核处理是突出显示像素值之间的差异

    50730编辑于 2022-05-29
  • 来自专栏CodecWang

    14: 轮廓特征

    目标 计算物体的周长、面积、质心、最小外接矩形等 OpenCV函数:cv2.contourArea(), cv2.arcLength(), cv2.approxPolyDP() 等 教程 在计算轮廓特征之前 ,并把轮廓画在第一幅图上: img_color1 = cv2.cvtColor(image, cv2.COLOR_GRAY2BGR) img_color2 = np.copy(img_color1) cv2 轮廓周长 perimeter = cv2.arcLength(cnt, True) # 585.7Copy to clipboardErrorCopied 参数2表示轮廓是否封闭,显然我们的轮廓是封闭的 ,比如M['m00']表示轮廓面积,与前面cv2.contourArea()计算结果是一样的。 小结 常用的轮廓特征: cv2.contourArea()算面积,cv2.arcLength()算周长,cv2.boundingRect()算外接矩。

    1.2K11编辑于 2021-12-07
  • 来自专栏流川疯编写程序的艺术

    OpenCV 轮廓检测

    参数为:画板,轮廓轮廓指示(这里画出所有轮廓),颜色,线粗  drawContours(result,contours,-1,Scalar(0),2);  imshow("提取外围轮廓",result drawContours(result,contours,-1,Scalar(0),2);  imshow("提取所有轮廓",result);  通常,这样提取的轮廓包含一些我们不希望的轮廓(比如一些小洞 Scalar(2),2);  }  imshow("形状描述子",result);  我们再次看到,轮廓的确是有顺序的。 函数cv::pointPolygonTest计算一个点是否在轮廓内,cv::matchShapes测量了2两个轮廓的相似程度等等。这里就不一一介绍了。 findContours后会对输入的2值图像改变,所以如果不想改变该2值图像,需创建新mat来存放,findContours后的轮廓信息contours可能过于复杂不平滑,可以用approxPolyDP

    1.3K20编辑于 2022-11-29
  • 来自专栏JNing的专栏

    opencv: 绘制矩形轮廓框,并记录轮廓框坐标

    步骤简述 使用OpenCV绘制矩形轮廓框,一般包括如下步骤: 转换为灰度图; 进行阈值处理; 进行中值滤波; 在原始图像上绘制矩形框。 附图解析 原始图像: 第一步,转换为灰度图: 第二步,经过阈值处理: 第三步,中值滤波后: 最后一步,在原始图像上绘制矩形框: 生成的记录文件(矩形轮廓框四个端点的平面坐标 /origin.jpg') # 文档路径,用于记录轮廓框坐标 txt_file = open('. pic = cv2.medianBlur(pic, 5) # 边缘检测,得到的轮廓列表 _1, contours, _2 = cv2.findContours(pic, cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE) # 根据轮廓列表,循环在原始图像上绘制矩形边界 for i in range(len(contours)): cnt = contours[i]

    3.8K30发布于 2018-09-28
  • 来自专栏CSDN博客专家-小蓝枣的博客

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

    以下是一个使用轮廓匹配的示例代码: import cv2 # 读取参考轮廓图像 reference_contour = cv2.imread('reference_contour.jpg', cv2. , target_contours[0], cv2.CONTOURS_MATCH_I1) 在上述示例中,我们首先读取参考轮廓图像和目标轮廓图像,并通过边缘检测和轮廓寻找获取轮廓。 : area = cv2.contourArea(contour) # 计算轮廓面积 perimeter = cv2.arcLength(contour, True) # 计算轮廓周长 1])) # 计算轮廓的质心坐标 # 在图像上绘制轮廓特征 cv2.drawContours(contour_image, [contour], -1, (0, 255, 0), 2 # 显示带有轮廓特征的图像 cv2.imshow("Contours", contour_image) cv2.waitKey(0) cv2.destroyAllWindows() 这个示例将加载轮廓图像

    6K10编辑于 2023-07-10
  • 来自专栏图像处理与模式识别研究所

    轮廓的矩

    )#将灰度图片转换为二值图片 contours,hierarchy=cv2.findContours(binary,cv2.RETR_LIST,cv2.CHAIN_APPROX_SIMPLE)#计算图像轮廓 drawContours(contoursImg[i],contours,i,255,3)#绘制图像轮廓 cv2.imshow("contours["+str(i)+"]",contoursImg[i] ) print("轮廓"+str(i)+"的矩:\n",cv2.moments(contours[i]))#提取轮廓特征 print("轮廓"+str(i)+"的面积:%d"%cv2.moments(contours [i])['m00']) cv2.waitKey() cv2.destroyAllWindows() 轮廓19的矩: {'m00': 8974.5, 'm10': 2036635.8333333333 如果两个图像轮廓的矩一致,那么两个图像轮廓一致。在图像位置发生变化时,虽然图像轮廓的面积、周长等特征不变,但是更高阶的特征会随着位置的变化而发生变化。

    79520编辑于 2022-05-28
领券