OpenCV---对象测量



一:获取图像的外接矩形boundingRect和几何距moments
import cv2 as cv
import numpy as np def measure_object(image):
gray = cv.cvtColor(image,cv.COLOR_BGR2GRAY) #转灰度图像
ret, binary = cv.threshold(gray,,,cv.THRESH_OTSU|cv.THRESH_BINARY_INV) #获取二值化图像
print("thresold value:",ret)
cv.imshow("binary image",binary)
outImage,contours,hireachy = cv.findContours(binary,cv.RETR_EXTERNAL,cv.CHAIN_APPROX_SIMPLE)
for i,contour in enumerate(contours):
area = cv.contourArea(contour) #获取每个轮廓面积
x,y,w,h = cv.boundingRect(contour) #获取轮廓的外接矩形
rate = min(w,h)/max(w,h) #获取外接矩形宽高比,可以起到一定的筛选作用
print("rectangle rate:%s"%rate)
mm = cv.moments(contour) #求取轮廓的几何距
print(type(mm))
print(mm)
cx = mm['m10']/mm['m00']
cy = mm['m01']/mm['m00']
cv.circle(image,(np.int(cx),np.int(cy)),,(,,),-) #根据几何距获取的中心点,画出中心圆
cv.rectangle(image,(x,y),(x+w,y+h),(,,),) #根据轮廓外接矩形返回数据,画出外接矩形
print("contour area:",area)
cv.imshow("measure_object",image) src = cv.imread("./dg.png") #读取图片
cv.namedWindow("input image",cv.WINDOW_AUTOSIZE) #创建GUI窗口,形式为自适应
cv.imshow("input image",src) #通过名字将图像和窗口联系 measure_object(src) cv.waitKey() #等待用户操作,里面等待参数是毫秒,我们填写0,代表是永远,等待用户操作
cv.destroyAllWindows() #销毁所有窗口
mm-->{'m02': 3301.25, 'm12': 233530.03333333333, 'm30': 6934377.600000001, 'mu11': -10.721153846156085, 'm21': 1265395.2, 'nu02': 0.08336283484212434, 'm01': 252.5, 'mu30': -12.458842864260077, 'nu21': 0.003451665836783194, 'mu12': 11.46577909273492, 'nu12': 0.006828369938345303, 'mu02': 31.698717948717785, 'mu21': 5.795825115486707, 'm03': 43556.350000000006, 'nu30': -0.007419782588937784, 'm20': 97840.41666666666, 'm00': 19.5, 'm10': 1381.0, 'nu20': 0.09806301522275791, 'mu03': -11.52064431294275, 'm11': 17871.458333333332, 'nu03': -0.0068610445623109115, 'mu20': 37.2884615384537, 'nu11': -0.028195013402119877}

二:多边形逼近approxPolyDP
import cv2 as cv
import numpy as np def measure_object(image):
gray = cv.cvtColor(image,cv.COLOR_BGR2GRAY) #转灰度图像
ret, binary = cv.threshold(gray,,,cv.THRESH_OTSU|cv.THRESH_BINARY) #获取二值化图像
cv.imshow("binary image",binary)
dst = cv.cvtColor(binary,cv.COLOR_GRAY2BGR)
outImage,contours,hireachy = cv.findContours(binary,cv.RETR_EXTERNAL,cv.CHAIN_APPROX_SIMPLE)
for i,contour in enumerate(contours):
mm = cv.moments(contour) #求取轮廓的几何距
cx = mm['m10']/mm['m00']
cy = mm['m01']/mm['m00']
cv.circle(dst,(np.int(cx),np.int(cy)),,(,,),-) #画出中心点
approxCurve = cv.approxPolyDP(contour,,True) #4是与阈值的间隔大小,越小越易找出,True是是否找闭合图像
print(approxCurve.shape)
if approxCurve.shape[] >= :
cv.drawContours(dst,contours,i,(,,),) #画出轮廓
elif approxCurve.shape[] == :
cv.drawContours(dst,contours,i,(,,),)
else:
cv.drawContours(dst,contours,i,(,,),) cv.imshow("measure_object",dst) src = cv.imread("./lk.png") #读取图片
cv.namedWindow("input image",cv.WINDOW_AUTOSIZE) #创建GUI窗口,形式为自适应
cv.imshow("input image",src) #通过名字将图像和窗口联系 measure_object(src) cv.waitKey() #等待用户操作,里面等待参数是毫秒,我们填写0,代表是永远,等待用户操作
cv.destroyAllWindows() #销毁所有窗口

相关知识补充
(一)相关函数方法
cv.contourArea(contour) #获取每个轮廓面积
cv.boundingRect(contour) #获取轮廓的外接矩形
cv.moments(contour) #求取轮廓的几何距
cv.arcLength(contour,True) #求取轮廓的周长,指定闭合
(二)approxPolyDP轮廓逼近方法
approxCurve = cv.approxPolyDP(contour,,True) #4是与阈值的间隔大小,越小越易找出,True是是否找闭合图像
def approxPolyDP(curve, epsilon, closed, approxCurve=None): # real signature unknown; restored from __doc__
第一个参数curve:输入的点集,直接使用轮廓点集contour
第二个参数epsilon:指定的精度,也即是原始曲线与近似曲线之间的最大距离。
第三个参数closed:若为true,则说明近似曲线是闭合的,反之,若为false,则断开。
第四个参数approxCurve:输出的点集,当前点集是能最小包容指定点集的。画出来即是一个多边形;
返回值
approxCurve:输出的点集,当前点集是能最小包容指定点集的。画出来即是一个多边形;
print(approxCurve) #打印每个轮廓的特征点
print(approxCurve.shape) #打印该点集的shape,第一个数是代表了点的个数,也就是边长连接逼近数
[[[ ]] [[ ]] [[ ]] [[ ]]]
(, , ) #矩形,四个点逼近图像
[[[ ]] [[ ]] [[ ]] [[ ]]]
(, , )
[[[ ]] [[ ]] [[ ]]]
(, , ) #3是三角形
[[[ ]] [[ ]] [[ ]] [[ ]] [[ ]] [[ ]] [[ ]]]
(, , ) #7,8,9都是圆形类
[[[ ]] [[ ]] [[ ]] [[ ]] [[ ]] [[ ]] [[ ]] [[ ]]]
(, , )
[[[ ]] [[ ]] [[ ]] [[ ]] [[ ]] [[ ]] [[ ]]]
(, , )
[[[ ]] [[ ]] [[ ]] [[ ]] [[ ]] [[ ]] [[ ]] [[ ]] [[ ]]]
(, , )
[[[ ]] [[ ]] [[ ]] [[ ]]]
(, , )
[[[ ]] [[ ]] [[ ]] [[ ]]]
(, , )
[[[ ]] [[ ]] [[ ]] [[ ]] [[ ]] [[ ]] [[ ]] [[ ]]]
(, , )
OpenCV---对象测量的更多相关文章
- opencv——对象提取与测量
#include <opencv2/opencv.hpp> #include <iostream> #include <math.h> using namespac ...
- 【python-opencv】对象测量
opencv 中轮廓特征包括: 如面积,周长,质心,边界框等 *弧长与面积测量 *多边形拟合 *获取轮廓的多边形拟合结果 python-opencv API提供方法: cv2.moments()用来计 ...
- opencv——对象计数
思路: 1.通过形态学操作.阈值处理.距离变换等方法,使得各个轮廓分开 2.计算轮廓数量 #include <opencv2/opencv.hpp> #include <iostr ...
- python实现对象测量
目录: 问题,轮廓找到了,如何去计算对象的弧长与面积(闭合),多边形拟合,几何矩的计算等 (一)对象的弧长与面积 (二)多边形拟合 (三)几何矩的计算 (四)获取图像的外接矩形boundingRect ...
- 如何精确地测量java对象的大小-底层instrument API
转载: 如何精确地测量java对象的大小-底层instrument API 关于java对象的大小测量,网上有很多例子,大多数是申请一个对象后开始做GC,后对比前后的大小,不过这样,虽然说这样测量对象 ...
- 【opencv基础】测量运行时间的函数getTickCount/getCPUTickCount/getTickFrequency
函数的计算结果类型是double,单位是秒. 要使用更精确的计时,就需要使用getCPUTickCount(),不过现代计算机CPU的频率会随着负载而变化所以没大有必要使用该函数,可以参看函数的介绍[ ...
- Python10个图像处理工具
原文地址:https://cloud.tencent.com/developer/article/1498116 译者 | 小韩 来源 | towardsdatascience [磐创AI导读]:本篇 ...
- Python中的十大图像处理工具
转自:微信博客 机器学习研究会订阅号 微信号 功能介绍机器学习研究会由百度七剑客雷鸣先生创办,旨在推动AI的技术发展和产业落地.参与组织北大.清华”AI前沿与产业趋势“公开课,广泛的和高校.企业.创业 ...
- 十个python图像处理工具
介绍 如今的世界存在了大量的数据,图像数据是重要的组成部分.如果要利用这些图片,需要对图像进行处理,提高图片质量或提取图片内容信息. 图像处理的常见操作包括图像显示,基本操作如裁剪,翻转,旋转等,图像 ...
- android绘制view的过程
1 android绘制view的过程简单描述 简单描述可以解释为:计算大小(measure),布局坐标计算(layout),绘制到屏幕(draw): 下面看看每一步的动作到底是 ...
随机推荐
- linux awk,sort,uniq,wc,cut命令详解
1.awk awk是行处理器: 相比较屏幕处理的优点,在处理庞大文件时不会出现内存溢出或是处理缓慢的问题,通常用来格式化文本信息 $ 表示当前行 $ 表示第一列 NF 表示一共有多少列 $NF 表示最 ...
- C++Primer第五版——习题答案和解析
感谢原文博主的分享:https://blog.csdn.net/misayaaaaa/article/details/53786215 新手入门必看的书.知识是一个系统化并且相互关联的体系,零散的东西 ...
- 404 Note Found -(课堂实战)- 项目UML设计(团队)
目录 团队信息 分工选择 课上分工 课下分工 ToDolist alpha版本要做的事情 燃尽图 UML 用例图 状态图 活动图 类图 部署图 实例图 对象图 时序图 包图 通信图 贡献分评定 课上贡 ...
- prefix pch 中引用cocoapods 中的头文件失败
如题,遇到这个问题,卡了几个小时,记下来防止下次再卡住: 解决办法: 1.pod install, 2.新建pch文件:projectname-Prefix.pch, 3.按要求在工程配置中添加, O ...
- 【技术向】rainmeter的设计与发现
我们在大学期间所学的那点代码知识还远远不够,于是我就自己寻找到了一款简单易懂的软件,来丰富我的代码知识. 这款软件叫rainmeter,中文叫做雨滴,是一款可以修改桌面的软件.它可以将桌面上更改出硬盘 ...
- Sqlserver学习研究
关注关键词 :Sqlserver实用工具配置步骤 1)创建实用工具控制点(UCP) 2)连接到现有UCP 3)相UCP注册SQL Server实例 4)创建数据层应用程序 5)设置资源运行状况策略 6 ...
- CodeForces Round #527 (Div3) D1. Great Vova Wall (Version 1)
http://codeforces.com/contest/1092/problem/D1 Vova's family is building the Great Vova Wall (named b ...
- 【转】MySQL数据类型
1.整型 MySQL数据类型 含义(有符号) tinyint(m) 1个字节 范围(-128~127) smallint(m) 2个字节 范围(-32768~32767) mediumint(m) ...
- php反射机制应用
用来获取指定的类的信息,包括类中的属性,方法,方法权限,注释等 用途:1.thinkPHP框架中的前置,后置控制器的实现 2.与debug_backtrace函数结合使用,文件调用的权限管理 使用方法 ...
- php中扩展pecl与pear
要为大家分享的内容是PECL 和 PEAR 他们之间的不同和相同之处. PEAR 是“PHP Extension and Application Repository”的缩写,即PHP扩展和应用仓库. ...