opencv_python学习笔记十八
来源:互联网 发布:求数据库系统概念中文 编辑:程序博客网 时间:2024/05/17 23:37
21 opencv的轮廓
常用函数:
def findContours(image, #二值单通道图像
mode, #轮廓的检测方式
method, #轮廓的近似办法
contours=None, #要绘制的边缘数组
hierarchy=None, #轮廓个数
offset=None)#轮廓点的偏移量
Mode的检测模式有:
Cv2.RETR_EXTERNAL #得到最外面的轮廓CV_RETR_LISTCV_RETR_TREEmethod轮廓的近似方法CV_CHAIN_APPROX_NONE #所有边界点都会被存储CV_CHAIN_APPROX_SIMPLE# 会去掉轮廓上的冗余点CV_CHAIN_APPROX_TC89_L1CV_CHAIN_APPROX_TC89_KCOS
def drawContours(image, #目标图像
contours, #要绘制的边缘数组
contourIdx, #需要绘制的边缘索引
color, #绘制的颜色
thickness=None, #画笔宽度
lineType=None, #连线类型
hierarchy=None, #用于传入层级关系
maxLevel=None, #层级中的最大级别
offset=None)#每个轮廓点的偏移量
1 绘制轮廓
示例代码如下:
#!/usr/bin/env python# -*- coding: utf-8 -*-# @Time : 2016/11/22 8:38# @Author : Retacn# @Site : 图像轮廓# @File : imageContuor.py# @Software: PyCharmimport cv2import numpy as npfrom matplotlib import pyplot as plt# 读入图像img = cv2.imread('../test.jpg')img2=cv2.imread('../test1.jpg')temp_img = img.copy()# 变为灰度图像imggray = cv2.cvtColor(temp_img, cv2.COLOR_BGR2GRAY)# 设定阈值ret, thresh = cv2.threshold(imggray, 127, 255, 0)# 查找轮廓image, contours, hierarchy = cv2.findContours(thresh,#二值单通道图像 cv2.RETR_TREE,#轮廓的检测方法 cv2.CHAIN_APPROX_SIMPLE)#轮廓的近似方法# 绘制轮廓image_re = cv2.drawContours(img2,#目标图像 contours,#边缘数组 263,#要绘制的轮廓的索引 (0, 255, 0),#颜色 3)#画笔宽度# 源图像plt.subplot(131), plt.imshow(img, 'gray')plt.title("Original"), plt.xticks([]), plt.yticks([])# 查询完后图像plt.subplot(132), plt.imshow(image, 'gray')plt.title("Image"), plt.xticks([]), plt.yticks([])# 绘制轮廓plt.subplot(133), plt.imshow(image_re, 'gray')plt.title("Image_re"), plt.xticks([]), plt.yticks([])plt.show()
2 轮廓特征
查询轮廓的不同特征 面积 周长 重心 边界
矩
def moments(array,#二维点列
binaryImage=None)#如果是true所有非零值像素置1
示例代码如下:
#!/usr/bin/env python# -*- coding: utf-8 -*-# @Time : 2016/11/22 10:15# @Author : Retacn# @Site : 轮廓特征# @File : contuorFeature.py# @Software: PyCharmimport cv2import numpy as npfrom matplotlib import pyplot as plt#读入图像img=cv2.imread('../test.jpg')temp_img = img.copy()# 变为灰度图像imggray = cv2.cvtColor(temp_img, cv2.COLOR_BGR2GRAY)# 设定阈值ret, thresh = cv2.threshold(imggray, 127, 255, 0)# 查找轮廓image, contours, hierarchy = cv2.findContours(thresh,#二值单通道图像 cv2.RETR_TREE,#轮廓的检测方法 cv2.CHAIN_APPROX_SIMPLE)#轮廓的近似方法contour=contours[0]M=cv2.moments(contour)print(M)
#输出结果:#{'m11': 821515965.3333333, #空间矩形
'nu11': -2.035886991415788e-05,
'mu12': -2124606.8292655945,
'm30': 259471192096.6,
'nu12': -2.7573417567631675e-06,#中心归一化矩
'm12': 119381836048.86667,
'mu11': -65793.66022455692, #中心矩形
'nu20': 0.10060818323074136,
'nu02': 0.06901872613271595,
'm10': 7503469.333333333,
'mu21': -2677871.7602539062,
'm20': 1315531329.0,
'm21': 144022195380.86667,
'nu30': 2.0259690085904074e-06,
'nu21': -3.475376018798413e-06,
'mu20': 325134973.16912174,
'm01': 6224491.333333333,
'm03': 147891998777.6,
'm02': 904589351.6666666,
'm00': 56848.0,
'mu03': 731122.353302002,
'nu03': 9.488598861180405e-07,
'mu02': 223047479.327415,
'mu30': 1561064.2318725586}
计算对象的重心
Cx=int(M[‘m10’]/M[‘m00’])
Cy=int(M[‘m01’]/M[‘m00’])
轮廓面积
def contourArea(contour,#二维点集
oriented=None)#面向区域标志,ture有向面积值
False是绝对值
示例代码如下:
#轮廓的面积area=cv2.contourArea(contour)print("轮廓面积:",area)#输出结果: 56848.0
轮廓周长
def arcLength(curve, #图像轮廓
closed)#指定对像形状是闭合的
#轮廓周长perimeter=cv2.arcLength(contour,True)print("轮廓周长:",perimeter)#输入结果为:963.3137083053589
#轮廓近似
def approxPolyDP(curve, #输入的点集
epsilon, #指定的精度
closed, #true为闭合
approxCurve=None)#输出的点集
示例代码如下:
# 绘制轮廓image_re = cv2.drawContours(temp_img,#目标图像 contours,#边缘数组 3,#要绘制的轮廓的索引 (0, 255, 0),#颜色 3)#画笔宽度
示例代码为:
# 轮廓的近似epsilon = 0.1 * cv2.arcLength(contour, True)approx = cv2.approxPolyDP(contour, epsilon, True)print('轮廓近似',approx)#输出结果:#[[[ 1 1]]#[[ 1 218]]#[[263 218]]#[[263 1]]]
#凸包
def convexHull(points, #要求凸包的焦点
hull=None, #输出的凸点包
clockwise=None, #顺时针还是逆时针方向
returnPoints=None)#函数的输出类型
True 返加凸包点上的坐标
False 凸包点对应的轮廓的点
示例代码为:#凸包hull=cv2.convexHull(contour)print('凸包',hull)#输出结果为:矩形的四个角#[[[263 218]]#[[ 1 218]]#[[ 1 1]]#[[263 1]]]
#凸性检测,返回布尔值
def isContourConvex(contour)#
示例代码如下:
#凸性检测,返回布尔值k=cv2.isContourConvex(contour)print('是否凸性',k)
边界矩形
直边界矩形
def boundingRect(points)#边界数组
def rectangle(img, #源图像
pt1, #对角线上的两个顶点
pt2, #
color,# 线条的颜色
thickness=None, #线条的宽度
lineType=None, #线条的类型
shift=None)#坐标点的小数点位数
旋转边界矩形
def minAreaRect(points)#边界数组
0 0
- opencv_python学习笔记十八
- opencv_python学习笔记一
- opencv_python学习笔记二
- opencv_python学习笔记三
- opencv_python学习笔记十一
- opencv_python学习笔记十二
- Opencv_Python学习笔记--OpenCV中的GUI特性
- OpenCV_Python学习笔记--OpenCV中的绘图函数
- OpenCV_Python 学习笔记(二)图像的基本操作
- 学习笔记(十八)
- Linux学习笔记(十八)
- 学习笔记(二十八)
- c语言学习笔记十八
- LinuxCast学习笔记十八:Network_Basic
- 第二十八篇: 学习笔记
- python 学习笔记(十八)
- Swift学习笔记(十八)泛型
- java学习笔记(十八)
- mysql5.7版本免安装配置教程
- test
- 多线程访问HashMap的问题
- ARM Cortex-M3中断跳转过程
- Linux 无法从本地字符界面(tty1-tty6)登陆深度解析
- opencv_python学习笔记十八
- 1061. 判断题(15)
- 工具类如何使用依赖注入其他组件
- h.264并行解码算法分析
- 提高项目执行力的六板斧
- 1063. 计算谱半径(20)
- 今天开始写博客
- 16. 3Sum Closest
- unity3d中的一些数学计算方法