opencv-python实战---物体长度尺寸测量

本文的主要算法实现思路:找一个最小面积的矩形提供长宽由此推算出其他物体的长度

博主只写了测量物体最左最右的长度,只能测量矩形。

如图

 最左边的为参照物,然后测量上下两个物体的最左和最右长度。

1,相关库

opencv-python  == 4.7.0.72

numpy == 1.24.2

 2,参数设置

if __name__ == '__main__':minArea = 200img = cv2.imread(r'D:\1\tp\7.jpg')img = cv2.resize(img, (0, 0), None, 0.5, 0.5)findDis1(img,W=50,H=50)

minArea为图片中最小的识别面积,小于这个面积将不会给识别

findDis1里面的W,H修改为自己的参照物长,宽

3,提取物体轮廓信息

def getContours(img):imgG = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)imgBlur = cv2.GaussianBlur(imgG, (5, 5), 1)imgCanny = cv2.Canny(imgBlur, 100, 100)img2 = img.copy()# kernel = np.ones((5, 5))contours, hiearchy = cv2.findContours(imgCanny, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)finalCountours = []for i in contours:area = cv2.contourArea(i)if area > minArea:# 计算轮廓的周长,true表示轮廓为封闭peri = cv2.arcLength(i, True)appprox = cv2.approxPolyDP(i, 0.02 * peri, True)bbox = cv2.boundingRect(appprox)if filter > 0:# if (len(appprox)) == filter:finalCountours.append([len(appprox), area, appprox, bbox, i])else:finalCountours.append([len(appprox), area, appprox, bbox, i])# 对第二个数值面积进行排序,为升序,找出轮廓的最大值finalCountours = sorted(finalCountours, key=lambda x: x[1], reverse=True)for con in finalCountours:cv2.drawContours(img, con[4], -1, (0, 0, 255), 4)return img, finalCountours, img2

前面先对img进行预处理(对输入的图像进行灰度化、高斯模糊和边缘检测操作)

contours,hiearchy=cv2.findContours(imgCanny,cv2.RETR_EXTERNAL,cv2.CHAIN_APPROX_SIMPLE)

 这个方法适用于opencv4版本的,如过这里报错的话可能是你的版本跟我不一样,如果是opencv3版本的话需要在前面加个参数

4,找到最小面积的轮廓并定位四个点


def reorder(myPoints):myPointsNew = np.zeros_like(myPoints)myPoints = myPoints.reshape((4, 2))add = myPoints.sum(1)myPointsNew[0] = myPoints[np.argmin(add)]myPointsNew[3] = myPoints[np.argmax(add)]diff = np.diff(myPoints, axis=1)myPointsNew[1] = myPoints[np.argmin(diff)]myPointsNew[2] = myPoints[np.argmax(diff)]return myPointsNew

这段代码是返回四个顶点

5,主要计算长度代码解释

 for i in cons3:# print(i[1])List.append(i[1])Min = min(List)Min = int(Min)inde = List.index(Min)nPoints = reorder(cons3[inde][2])xw = nPoints[1][0][0] - nPoints[0][0][0]xh = nPoints[2][0][1] - nPoints[0][0][1]a = xw / Wa1 = xh / Hfor i in cons3:List = []for i1 in i[2]:List.append([i1[0][0], i1[0][1]])Bubbl(List)seat = int(len(List) - 2)cv2.arrowedLine(img2,List[0], List[1],(255, 0, 255), 2, 8, 0, 0.05)cv2.arrowedLine(img2, List[seat], List[seat + 1],(255, 0, 255), 2, 8, 0, 0.05)xscd = findDis(List[0],List[1])CD = xscd / aCD = round(CD,1)x, y, w, h = i[3]cv2.putText(img2, '{}cm'.format(CD), (x + w, y), cv2.FONT_HERSHEY_COMPLEX_SMALL, 1,(255, 0, 255), 1)xscd1 = findDis(List[seat], List[seat+1])CD1 = xscd1 /aCD1 =round(CD1,1)cv2.putText(img2, '{}cm'.format(CD1), (x , y + h // 2), cv2.FONT_HERSHEY_COMPLEX_SMALL, 1,(255, 0, 255), 1)cv2.imshow('img2', img2)cv2.waitKey(0)

第一个for是找出最小矩形对应的长度像素值,与我们给出的实际长度做出一个参数a

第二个for是便利每一个矩形图像,并获得最左,最右两个边的长度以及位置信息,并用opencv打印上去主要信息

6,实际效果如图:

7,完整代码可在github上获取

github:https://github.com/weizhi8/opencv.git

地址失效可邮件私聊:2275716724@qq.com

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://xiahunao.cn/news/1618567.html

如若内容造成侵权/违法违规/事实不符,请联系瞎胡闹网进行投诉反馈,一经查实,立即删除!

相关文章

python编程实现图片内多个物体尺寸测量

要实现图片内多个物体尺寸测量,你可以使用计算机视觉库,如 OpenCV 来实现。 首先,你需要读取图片,然后对图像进行预处理,以便更容易地检测到图像中的物体。例如,你可以使用边缘检测算法来提取边缘&#xf…

基于图像处理的尺寸测量系统

图像处理的尺寸测量较为重要,可以根据图像处理的基本知识,得到图像的基本信息,然后根据其研究的内容和具体的开发研究现状,得到最后的测量结果,后面将具体的介绍方法。 可以看出在上述的图上,将环形画出来 …

基于OpenCV的 桌面手机的尺寸测量

基于OpenCV的 桌面手机的尺寸测量 代码 见资源:基于OpenCV(C)的桌面手机的尺寸测量 网址:https://download.csdn.net/download/Aquamarine__/16689432 实验数据:https://download.csdn.net/download/Aquamarine__/16…

【计算机视觉OpenCV基础】实验四 尺寸测量

实验四 尺寸测量 计算机视觉OpenCV基础实验合辑(实验1234扩展) 资源下载地址: https://download.csdn.net/download/weixin_53403301 合辑:(加在下载地址后面) /87113581 讲义(包括理论、图例、…

opencv 物体尺寸测量

1 原图,已知左上角正方形的实际大小为 2cm 2 转为灰度图 高斯模糊 gray cv2.cvtColor(image, cv2.COLOR_BGR2GRAY) cv2.GaussianBlur(gray, (9, 9), 0) 3、边缘检测 edged cv2.Canny(blur, 50, 100) 开运算 4、根据左上角参考物体,计算单位长度…

物体尺寸测量-matlab

本程序可以实现物体尺寸测量,比如工件 、零件、 树叶等物体的尺寸测量 ,诸如周长和面积的测量。采用两种方法实现,一种是链码的方法,一种是图像处理的方法,具体如下 方法一 采取链码的方法 图 展示了以树叶为例子 得到可周长和面积的显示系统 在这里采取了链码的方法计算…

opencv实战---物体尺寸测量

物体尺寸测量的思路是找一个确定尺寸的物体作为参照物,根据已知的计算未知物体尺寸。 如下图所示,绿色的板子尺寸为220*300(单位:毫米),通过程序计算白色纸片的长度。 目录 1、相关库 2、读图图片预处理…

python-opencv尺寸测量

原文:python-opencv尺寸测量_Krasjet_Yu.的博客-CSDN博客_python尺寸测量 首先,利用机器视觉来测定零件尺寸,我们能够直接得到的是图片的像素,要想获得尺寸大小,我们必须找到像素和实际尺寸间的关系。 我们在这里定义…

用Cmake build OpenCV后,在VS中查看OpenCV源码的方法(环境VS2022+openCV4.8.0) Part III

用Cmake build OpenCV后,在VS中查看OpenCV源码的方法(环境VS2022openCV4.8.0) Part III 用Cmake build OpenCV后,在VS中查看OpenCV源码的方法(环境VS2022openCV4.8.0) Part I_松下J27的博客-CSDN博客 用Cmake build OpenCV后&…

理解HTTPS/TLS/SSL(一)基础概念+配置本地自签名证书

文章目录 没有HTTPS时的样子场景模拟WireShark的Capture Filter和Display Filter设置Capture Filter启动程序设置Display Filter过滤抓到的包 结论 关于为什么加密更简洁有力的回答对称加密和非对称加密和CA证书密钥交换对称加密非对称加密CA机构和证书如何解决客户端和CA机构之…

顺序表链表OJ题(1)——【LeetCode】

W...Y的主页 😊 代码仓库分享 💕 前言: 今天我们来回顾一下顺序表与链表,针对这一块我们也有许多OJ题目供大家参考。当我们学习完顺序表链表后避免不了一些习题的练习,这样才能巩固我们学习的内容。 话不多说&#xf…

PCI/PCIE总线的宏观理解

1、pcie总线协议实现的效果 (1)像访问内存一样去访问外设; (2)当建立好CPU地址空间到PCI/PCIE地址空间的映射关系后,程序访问CPU地址空间就可以达到访问PCI/PCIE地址空间的效果; 2、芯片地址空间 (1)32位的CPU寻址范围是4G,64位的…

MySQL执行更新的流程

一、加载缓存数据 引擎要执行更新语句的时候 ,比如对“id10”这一行数据,他其实会先将“id10”这一行数据看看是否在缓冲池里,如果不在的话,那么会直接从磁盘里加载到缓冲池里来,而且接着还会对这行记录加独占锁。 二…

Spring中Bean及@Bean的理解与new对象的区别

一直在纠结一个问题:new创建对象和用Bean创建对象有什么区别吗?为什么在spring中要使用Bean?Bean有什么作用? 一、Bean是啥 1、Java面向对象,对象有方法和属性,那么就需要对象实例来调用方法和属性&#x…

Spring Bean到底是什么?有什么用?

Spring Bean是什么?有什么用? 一、Bean到底是什么?二.怎么使用bean?三.Bean配置四.Bean的作用域 Bean在Spring和SpringMVC中随处可见,将这个概念内化很重要,下面分享一下我的想法: 一、Bean到底是什么? …

spring bean是什么

原文链接:https://www.awaimai.com/2596.html 歪麦博客 Spring有跟多概念,其中最基本的一个就是bean,那到底spring bean是什么? Bean是Spring框架中最核心的两个概念之一(另一个是面向切面编程AOP)。 是否正确理解…

Spring Bean的作用域

在Spring中,bean作用域用于确定哪种类型的bean实例应该从Spring容器中返回给调用者。 目前Spring Bean的作用域或者说范围主要有五种。 作用域描述singleton在spring IoC容器仅存在一个Bean实例,Bean以单例方式存在,bean作用域范围的默认值…

Spring bean是什么?

Spring有跟多概念,其中最基本的一个就是bean,那到底spring bean是什么? Bean是Spring框架中最核心的两个概念之一(另一个是面向切面编程AOP)。 是否正确理解 Bean 对于掌握和高效使用 Spring 框架至关重要。 遗憾的是&#xff0…

什么是bean

什么是bean? bean是计算机自动生成的类,bean是一个由Spring IoC容器实例化、组装和管理的对象。也就是说,bean并不是程序员编辑的,而是程序运行时,由spring通过反射生成的。在程序中,我们并不使用代码去ne…

Bean介绍

1.Bean 简介 在 Spring 中,所有被IOC 容器管理的,构成应用核心骨架的对象都被成为 Bean,它是由容器来实例化、装配、管理的对象。此外,它也是你应用中众多对象的一个。Bean 以及依赖的实例化和装配等工作全部是由容器中的配置元信…