Contour Features 边界特征

查找轮廓 findContours

1 cv2.findContours(image, mode, method[, contours[, hierarchy[, offset]]]) → image, contours, hierarchy

参数解释

  • image:原图像,可以事先由compare()、inRange()、threshold()等得到binary的image图像
  • mode:轮廓检索模式
  • method:轮廓近似方法

mode参数可取值为

  1. CV_RETR_EXTERNAL 仅检索外部轮廓。
  2. CV_RETR_LIST 检索所有轮廓但是不建立层次关系。
  3. CV_RETR_CCOMP 检索所有轮廓并建立两级层次结构。
  4. CV_RETR_TREE 检索所有轮廓并建立嵌套轮廓层次结构。

method参数可取

  1. CV_CHAIN_APPROX_NONE 存储所有轮廓点。
  2. CV_CHAIN_APPROX_SIMPLE 压缩水平、垂直和对角线,仅留下其端点。
  3. CV_CHAIN_APPROX_TC89_L1,CV_CHAIN_APPROX_TC89_KCOS  应用了Teh-Chin链式近似算法的一种风格

计算图像的轮廓面积 cv2.contourArea()

1 cv2.contourArea(contour[, oriented]) → retval

计算图像的矩 cv2.moments()

1 cv2.moments(array[, binaryImage]) → retval

具体见代码

 1 import cv2
 2 import numpy as np
 3
 4 img = cv2.imread(‘star.jpg‘,0)
 5 ret,thresh = cv2.threshold(img,127,255,0)
 6 contours,hierarchy = cv2.findContours(thresh, cv.RETR_EXTERNAL, cv.CHAIN_APPROX_SIMPLE)
 7
 8 cnt = contours[0]
 9 M = cv2.moments(cnt)
10 print(cv2.contourArea(cnt))
11 print(M)
12
13 #得到{‘m00‘: 0.5, ‘m10‘: 53.83333333333333, ‘m01‘: 367.3333333333333, ‘m20‘: 5796.083333333333, ‘m11‘: 39549.541666666664, ‘m02‘: 269867.5833333333, ‘m30‘: 624050.9500000001, ‘m21‘: 4258186.233333333, ‘m12‘: 29055722.733333334, ‘m03‘: 198262758.70000002, ‘mu20‘: 0.027777777778283053, ‘mu11‘: -0.01388888888322981, ‘mu02‘: 0.027777777810115367, ‘mu30‘: -0.003703703638166189, ‘mu21‘: 0.0018518519221615293, ‘mu12‘: 0.001851847569924292, ‘mu03‘: -0.0037037134170532227, ‘nu20‘: 0.11111111111313221, ‘nu11‘: -0.05555555553291924, ‘nu02‘: 0.11111111124046147, ‘nu30‘: -0.020951311664420796, ‘nu21‘: 0.01047565641531008, ‘nu12‘: 0.010475631795338369, ‘nu03‘: -0.020951366982159467}
14
15 #我们利用这个可以得到重心
16 cx = int(M[‘m10‘]/M[‘m00‘])
17 cy = int(M[‘m01‘]/M[‘m00‘])
18 #contourArea的结果和m00的结果一致
19  

轮廓周长计算  cv2.arcLength()

1 perimeter = cv2.arcLength(cnt,True)
  • 第一个参数是contour
  • 第二个参数指定形状是不是闭合轮廓,true就是闭合的,否则是曲线

轮廓近似

1 cv2.approxPolyDP(curve, epsilon, closed[, approxCurve]) → approxCurve

参数解释

  • curve:输入的2D点,比如findContours得到的contour
  • epsilon:精度
  • closed:是否闭合,跟之前说的一样

输出的是近似之后的Contour

轮廓线拟合

1 cv2.polylines(img, pts, isClosed, color[, thickness[, lineType[, shift]]]) → img

参数解释

  • img:输入图像
  • pts:要拟合的轮廓的集合,例如[contours[1],contours[2]]
  • isClosed:是否闭合,跟之前说的一样
  • color:颜色,例如(0,0,255)
  • thickness:厚度,1 2 3等等
  • linetype:线的类型
  • shift:定点坐标中小数位数
 1 import cv2 as cv
 2 import numpy as np
 3 img = cv.imread("test.jpg",0)
 4 _,contours,_ = cv.findContours(img,2,1)
 5 cnt = contours[0]
 6 epsilon = 0.01 * cv.arcLength(cnt,True)#这里用arcLength得到轮廓周长或者曲线长度
 7 approx = cv.approxPolyDP(cnt,epsilon,True)
 8 out_img = cv.polylines(img,[approx],True,(0,0,255),2)
 9 cv.imshow("image",out_img)
10 k  = cv.waitKey(1) & 0xFF
11 if k== 27:
12     cv.destroyAllWindows()

凸包检测

1 cv2.convexHull(points[, hull[, clockwise[, returnPoints]]]) → hull


参数解释

  • points:输入的2D点集,如findContours得到的contour
  • hull:输出凸包
  • clockwise:如果是True,则输出凸包顺序为顺时针方向,否则为逆时针方向

函数返回的是凸包(点集)

1 import cv2 as cv
2 import numpy as np
3 img = cv.imread("test.jpg",0)
4 _,contours,_ = cv.findContours(img,2,1)
5 cnt = contours[1]
6 hull = cv.convexHull(cnt)
7 out_img = cv.polylines(img,[hull],True,(0,255,255),2)
8 cv.imshow("image",out_img)
9 cv.waitKey(0)

边界矩形

得到直边界矩形

1 cv2.boundingRect(points) → retval

参数解释

  • points:给出的需要确定边界的点集,例如contour

函数返回的是得到的边界矩形的四个顶点坐标

得到旋转矩形

1 cv2.minAreaRect(points) → retval

参数说明:

  • points :是findCountours得到的contour

使用

import cv2 as cv
import numpy as np
img = cv.imread("test.jpg",0)
_,contours,_ = cv.findContours(img,cv.RETR_LIST,cv.CHAIN_APPROX_SIMPLE)
cnt = contours[0]
rect_vertical = cv.boundingRect(cnt)
rect = cv.minAreaRect(cnt)#这里得到的是旋转矩形
box = cv.cv.BoxPoints(rect)#得到端点
box = np.int0(box)#向下取整

最小封闭圆

 

1 cv2.minEnclosingCircle(points) → center, radius


 

参数解释

  • points:输入点集,如contour

输出为圆中心点坐标和半径

 

椭圆拟合

 

1 cv2.fitEllipse(points) → retval


 

参数解释

  • points:输入点集,如contour

 

输出为椭圆,其属性有中心点坐标、两轴长、偏转角度

 

使用

 1 import cv2 as cv
 2 import numpy as np
 3 img = cv.imread("test.jpg",0)
 4 _,contours,_ = cv.findContours(img,cv.RETR_LIST,cv.CHAIN_APPROX_SIMPLE)
 5 cnt = contours[0]
 6 circle = cv.minEnclosingCircle(cnt)
 7 ellipse = cv.fitEllipse(cnt)
 8 out_1 = cv.circle(img,circle,(0,255,255),2)
 9 out_2 =cv.ellipse(img,ellipse,(0,255,255),2)
10 cv.imshow("img1",out_1)
11 cv.imshow("img2",out_2)
12 cv.waitKey(0)

原文地址:https://www.cnblogs.com/aoru45/p/9765262.html

时间: 2024-08-30 17:51:37

Contour Features 边界特征的相关文章

【特征匹配】SIFT原理之KD树+BBF算法解析

继上一篇中已经介绍了SIFT原理点击打开链接,最后得到了一系列特征点,每个特征点对应一个128维向量.假如现在有两副图片都已经提取到特征点,现在要做的就是匹配上相似的特征点. 相似性查询有两种基本方式:1.范围查询:即给点查询点和查询阈值,从数据集中找出所有与查询点距离小于阈值的点. 2.K近邻查询:给点查询点及正整数K,从数据集中找到与查询点最近的K个数据,当K=1时,就是最近邻查询. 特征匹配算子可以分为两类:1.穷举法:即将数据集中的点与查询点逐一计算距离,如果图1提取到N1个特征点,图2

图像特征点提取方法对比及特征点匹配方法

特征点提取方法 官网的文档 对特征的理解 Understanding Features harris特征点 Harris Corner Detection Shi-Tomasi特征点 Shi-Tomasi Corner Detector & Good Features to Track FAST特征点  FAST Algorithm for Corner Detection SIFT特征点 Introduction to SIFT (Scale-Invariant Feature Transfo

Harr-like特征算法

简介: 对于Harr特征以及Adaboost的讲解,网上有很多分析,在此记录一些较好的博客. 较好的文章: 两篇原文: 1.Rapid Object Detection using a Boosted Cascade of Simple Features 2.An Extended Set of Haar-like Features for Rapid Object Detection 维基百科: Viola–Jones object detection framework 小魏的修行路: 1.

图像处理之基础---图像的特征简介

常用的图像特征有颜色特征.纹理特征.形状特征.空间关系特征. 一 颜色特征 (一)特点:颜色特征是一种全局特征,描 述了图像或图像区域所对应的景物的表面性质.一般颜色特征是基于像素点的特征,此时所有属于图像或图像区域的像素都有各自的贡献.由于颜色对图像或图像区 域的方向.大小等变化不敏感,所以颜色特征不能很好地捕捉图像中对象的局部特征.另外,仅使用颜色特征查询时,如果数据库很大,常会将许多不需要的图像也 检索出来.颜色直方图是最常用的表达颜色特征的方法,其优点是不受图像旋转和平移变化的影响,进一

利用RANSAC算法筛选SIFT特征匹配

关于RANSAC算法的基本思想,可从网上搜索找到,这里只是RANSAC用于SIFT特征匹配筛选时的一些说明. RANSAC算法在SIFT特征筛选中的主要流程是: (1) 从样本集中随机抽选一个RANSAC样本,即4个匹配点对 (2) 根据这4个匹配点对计算变换矩阵M (3) 根据样本集,变换矩阵M,和误差度量函数计算满足当前变换矩阵的一致集consensus,并返回一致集中元素个数 (4) 根据当前一致集中元素个数判断是否最优(最大)一致集,若是则更新当前最优一致集 (5) 更新当前错误概率p,

8.2 特征描述子

8.1 尺度空间 图像特征中尺寸空间的相关理论基础. 8.1.1尺度与旋转不变性 局部不变性:尺度不变性(视觉远近与目标认知分析无关)和旋转不变性(旋转操作与目标认知分析无关) 特征描述 目标特征分析:关键点检测与关键点提取 8.2.1 SIFT特征 关键点检测和描述算法 优点:旋转.尺度.平移.视角及亮度不变性:对参数调整鲁棒性好(根据场景调整适宜特征点数量) 该算法对图像局部特征点提取包括4个步骤:疑似关键点检测.去除伪关键点.关键点梯度与方向匹配及特征向量生成 SIFT特征检测及匹配: h

模式匹配算法:扫描+特征比较

模式匹配算法的本质就是:扫描+特征比较: 特征提取:核心是目标特征分析 1.整体特征:整体hash: 2.边界特征:忽略中间量,仅对首尾做特征提取: 3.分析特征:适合有重复字符的匹配模式: 4.统配特征:边界特征+限制特征+位数: 扫描: 1.逐位扫描: 2.边界特征扫描: 3. 原文地址:https://www.cnblogs.com/feng9exe/p/9968266.html

原来CNN是这样提取图像特征的。。。

对于即将到来的人工智能时代,作为一个有理想有追求的程序员,不懂深度学习(Deep Learning)这个超热的领域,会不会感觉马上就out了?作为机器学习的一个分支,深度学习同样需要计算机获得强大的学习能力,那么问题来了,我们究竟要计算机学习什么东西?答案当然是图像特征了.将一张图像看做是一个个像素值组成的矩阵,那么对图像的分析就是对矩阵的数字进行分析,而图像的特征,就隐藏在这些数字规律中.深度学习对外推荐自己的一个很重要的点--深度学习能够自动提取特征.本文主要介绍卷积层提取特征的原理过程,文

001.UG概述

第1章 UG概述 本章主要内容: UG产品介 UG产品的特点 UG各功能模块 1.1 UG产品介绍 Unigraphics NX软件作为UGS公司提供的产品全生命周期解决方案中面向产品开发领域的旗舰产品,为用户提供了一套集成的.全面的产品开发解决方案,用于产品设计.分析.制造,帮助用户实现产品创新,缩短产品上市时间.降低成本.提高质量.Unigraphics NX软件是构建于最新的体系结构--NX体系结构基础之上的,这是一个支持产品全生命周期管理的全新体系结构,是UGS公司同其主要客户一起设计开