Opencv笔记(十七)——轮廓性质
边界矩形的宽高比
x,y,w,h = cv2.boundingRect(cnt)
aspect_ratio = float(w)/h
Extent
Extent就是轮廓面积与边界矩形面积的比。
area = cv2.contourArea(cnt)
x,y,w,h = cv2.boundingRect(cnt)
rect_area = w*h
extent = float(area)/rect_area
Solidity
Solidity就是轮廓面积与凸包面积的比。
area = cv2.contourArea(cnt)
hull = cv2.convexHull(cnt)#计算出凸包形状
hull_area = cv2.contourArea(hull)#计算凸包的面积
solidity = float(area)/hull_area
Equivalent Diameter
Equivalent Diameter就是与轮廓面积相等的圆形的直径。
area = cv2.contourArea(cnt)
equi_diameter = np.sqrt(4*area/np.pi)
方向
方向是指向物体的角度。下面的方法也给出了主轴和小轴的长度。
(x,y),(MA,ma),angle = cv2.fitEllipse(cnt)#MA,ma 分别为长轴短轴长度
掩模和像素点
有时我们需要构成对象的所有像素点,我们可以这样做:
# coding=utf-8
import cv2
import numpy as npimg = cv2.imread("/home/wl/10.jpeg")
img_gray = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY) #转灰度图
mask = np.zeros(img_gray.shape,np.uint8) #依据图像的大小建立一个全黑的模板
ret, thresh = cv2.threshold(img_gray, 175, 255, 0) #灰度图像二值化处理
contours, hierarchy = cv2.findContours(thresh,cv2.RETR_TREE,cv2.CHAIN_APPROX_SIMPLE)
cnt = contours[1]
cv2.drawContours(mask,[cnt],0,255,-1) #num为希望进行掩模显示的轮廓, # 这里一定要使用参数-1, 绘制填充的的轮廓
while(1):cv2.imshow("mask",mask)cv2.imwrite("/home/wl/baocun1.jpg", mask)k = cv2.waitKey(1) & 0XFFif k==ord('q'):break;
cv2.destroyAllWindows()
效果图:
轮廓最大值和最小值及它们的位置
我们可以使用掩模图像得到这些参数。
min_val, max_val, min_loc, max_loc = cv2.minMaxLoc(imgray,mask = mask)
平均颜色及平均灰度
我们也可以使用相同的掩模求一个对象的平均颜色或平均灰度。
mean_valCol = cv2.mean(img,mask = mask) #彩色图像的平均颜色
mean_valGray=cv2.mean(imgray,mask = mask) #平均灰度
轮廓极点
一个对象最上面,最下面,最左边,最右边的点。
cnt=cnts[num] ##首先从所有的轮廓中选择其中的一个轮廓
leftmost = tuple(cnt[cnt[:,:,0].argmin()][0])
rightmost = tuple(cnt[cnt[:,:,0].argmax()][0])
topmost = tuple(cnt[cnt[:,:,1].argmin()][0])
bottommost = tuple(cnt[cnt[:,:,1].argmax()][0])
转载于:https://www.cnblogs.com/longwhite/p/10397747.html
Opencv笔记(十七)——轮廓性质相关推荐
- OpenCV笔记-对轮廓进行平滑处理
项目背景 有一个像素数较少的图像,在上面找轮廓,显示轮廓锯齿严重: 如何将轮廓进行平滑? 一开始是想着将轮廓上的拐点拟合出一个贝塞尔曲线,由于要绘制回原图像上,且贝塞尔曲线的生成也没有找到很好的办法: ...
- OpenCV学习笔记(十七)——K均值聚类
当我们要预测的是一个离散值时,做的工作就是"分类".机器学习模型还可以将训练集中的数据划分为若干个组,每个组被称为一个"簇(cluster)".它的重要特点是在 ...
- OpenCV中的轮廓及性质
转:https://www.kancloud.cn/aollo/aolloopencv/272892 OpenCV中的轮廓 1.1什么是轮廓 轮廓可以简单认为成连续的点(连着边界)连在一起的曲线,具有 ...
- Opencv 笔记5 边缘处理-canny、sobel、Laplacian、Prewitt
一.边缘检测概述 边缘检测是计算视觉中的基本问题,边缘检测的目的是标识图像中亮度变换明显的点.边缘检测大幅度的减少了图像的数据量(分为两种:灰度图像边缘检测和彩色图像边缘检测),并且剔除了不相关的信息 ...
- Python-OpenCV 笔记6 -- 轮廓(Contours)
Python-OpenCV 笔记6 – 轮廓(Contours) 参考文档: https://docs.opencv.org/3.4/dd/d49/tutorial_py_contour_featur ...
- OpenCV-Python 中文教程15——OpenCV 中的轮廓
OpenCV-Python 中文教程15--OpenCV 中的轮廓 一.初识轮廓 目标 • 理解什么是轮廓 • 学习找轮廓,绘制轮廓等 • 函数: cv2.findContours(), cv2.dr ...
- OpenCV笔记-图像预处理1
OpenCV笔记 一. 图像预处理 1. 图像显示与存储 1.1 颜色空间 颜色空间(RGB) 加法混色 三通道:RGB 一个像素的颜色值:(b,g,r) 取值范围:[0,255] or [0.0,1 ...
- OpenCV检测图像轮廓
轮廓只不过是图像中连接的曲线,或者图像中连通部分的边界,轮廓通常以图像中的边缘来计算,但是,边缘和轮廓的区别在于轮廓是闭合的,而边缘可以是任意的.边缘的概念局限于点及其邻域像素,轮廓将目标作为整体进行 ...
- 计算机视觉开源库OpenCV之绘制轮廓函数cv2.drawContours()介绍
计算机视觉开源库OpenCV之绘制轮廓函数cv2.drawContours(),用于轮廓的绘制或填充. cv2.drawContours(image, contours, contourIdx, co ...
- 计算机视觉开源库OpenCV之查找轮廓函数cv2.findContours()介绍
计算机视觉开源库OpenCV之查找轮廓函数cv2.findContours说明如下: 示例代码: #!/usr/bin/env python3import cv2image = cv2.imread( ...
最新文章
- CPU架构的llvm后端
- SEO中的DIV CSS样式的命名规则
- C语言 读取文件内容
- c语言流水灯小程序,流水灯小程序.doc
- Hudson Jameson将在柏林硬分叉后卸任以太坊基金会社区经理
- android gridview隐藏滚动条,如何禁用GridView中的ScrollViewer的滚动
- vc sleep不占进程_Python 中的进程深入
- Code Style of Mangata
- [Flutter] 一些面试可能会问基础知识
- java日期处理SimpleDateFormat等
- ubuntu锐捷校园网
- 关于echart 饼图显示不出来 挖坑总结
- 人脸识别服务器架构设计
- 线代——余子式和代数余子式
- 贝尔曼-福特算法(Bellman-Ford)
- 简述DDNS和DNS区别
- JavaSe复习笔记
- TIM定时中断(定时器介绍)
- 事件研究法——stata实现并购的超额回报率计算
- 数据中心编码命名标志标签的建议规范
热门文章
- 修复Edge浏览器无法登录微软账户问题
- 2021年流动式起重机司机免费试题及流动式起重机司机试题及解析
- 手机百度网页背景颜色设置_手机百度底色怎么变为黑色?
- 品牌零售号角吹响,开发B2C网站需要注意什么?
- 小建中汤与先天性结肠黑斑息肉
- android launcher目录,【 Android 10 系统启动 】系列 -- Launcher(应用门户)
- 光猫 高级NAT配置
- UVM实战 卷I学习笔记10——UVM中的寄存器模型(3)
- linux使用DEVICE_ATTR创建设备节点(常用)
- 如何用计算机模拟基金收益,[原创]中国股市十七年的基金计算机模拟