网站建设论文设计,网站建设方案ppt,项目网专栏,四大门户网站排名1.简介
1.1 2D测量技术
基于单目相机的2D测量技术在许多领域中具有重要的背景和意义。
工业制造#xff1a;在工业制造过程中#xff0c;精确测量是确保产品质量和一致性的关键。基于单目相机的2D测量技术可以用于检测和测量零件尺寸、位置、形状等参数#xff0c;进而实…1.简介
1.1 2D测量技术
基于单目相机的2D测量技术在许多领域中具有重要的背景和意义。
工业制造在工业制造过程中精确测量是确保产品质量和一致性的关键。基于单目相机的2D测量技术可以用于检测和测量零件尺寸、位置、形状等参数进而实现自动化生产和质量控制。通过实时监测并反馈测量结果可以快速发现和纠正生产中的偏差提高产品的一致性和合格率。
计算机视觉单目相机作为计算机视觉的传感器之一能够捕捉并记录场景中的图像信息。基于单目相机的2D测量技术可以通过对图像进行处理和分析来提取目标物体的特征和参数。这种技术在目标检测、物体跟踪、姿态估计等计算机视觉任务中起着至关重要的作用。
地理测绘和导航基于单目相机的2D测量技术可以应用于地理测绘和导航领域。通过获取地面或航空图像并利用图像处理和计算机视觉算法可以实现地表特征的提取、地形建模、数字地图的生成等工作。这对于城市规划、农业管理、导航系统等方面具有重要的应用价值。
医学影像在医学领域基于单目相机的2D测量技术可以用于医学影像的分析和测量。通过对医学图像进行处理和分析可以提取器官、病灶的形状、大小、位置等信息辅助医生进行诊断和治疗决策。这种技术在影像学、放射学、眼科等医学专业中得到广泛应用。
综上所述基于单目相机的2D测量技术在工业制造、计算机视觉、地理测绘和导航、医学影像等领域都有着重要的背景和意义。它可以提高生产效率、产品质量推动科学研究和医学进步为各个领域带来更多的机遇和挑战。
1.2 yolo算法
YOLOYou Only Look Once是一种实时目标检测算法它的主要思想是将目标检测问题转化为一个回归问题。相较于传统的目标检测算法YOLO具有更快的处理速度和较高的准确性。
YOLO算法的基本原理如下 将输入图像划分为一个固定大小的网格。每个网格负责预测该网格中是否包含目标以及目标的边界框。 每个网格预测多个边界框一般为5个以适应不同形状的目标。 每个边界框预测目标类别的概率。 对每个边界框的位置和类别进行综合预测。 使用非极大值抑制NMS处理重叠的边界框以获取最终的目标检测结果。
YOLO算法相较于其他目标检测算法的优势在于其端到端的设计能够实现实时目标检测并且减少了检测过程中的多次重复计算。然而由于YOLO将图像划分为网格对于小尺寸目标和密集目标的检测效果可能会稍差。
此外YOLO还有不同版本的改进如YOLOv2、YOLOv3和YOLOv4等这些改进版本在准确性和速度方面有所提升同时也引入了一些新的技术和网络结构如多尺度预测、锚框、Darknet-19等。 2.功能实现
2.1构思
上一章我们实现了opencv对手机卡片等轮廓清晰物体的尺寸测量但是在过程中我们发现复杂物体的轮廓很难有效提取干扰太多不准确。所以我思考用深度学习的方法来寻找这个包围物体的框于是想到了yolo算法。当然这个想法比较简单欢迎大佬评论区指正
这是我导的一个项目用于未来试智能立体停车场的视觉部分要求只能单目相机单目便宜真实服啦最后实时帧率只能到6帧左右当然用gpu加速可以30帧以上。但是runtimeonnx用过的都懂对环境要求较高不太适合普及。
2.2 代码思路
主函数
import cv2
import utlis
from ours import *
# from utlis import *
import time###################################
webcam True
path img.png
# cap cv2.VideoCapture(rD:\Opencv-project-main\CVZone\09 Object Size Measurement\5.mp4)
cap cv2.VideoCapture(0)
cap.set(10,160)
cap.set(3,1920)
cap.set(4,1080)
scale 3
wP 210 *scale
hP 297 *scale
###################################pTime 0
while True:if webcam:success,img cap.read()else: img cv2.imread(path)img1img.copy()imgContours , conts utlis.getContours(img,minArea50000,filter4)if len(conts) ! 0:biggest conts[0][2]#print(biggest)imgWarp utlis.warpImg(img, biggest, wP,hP)imgimgWarp.copy()onnx_path rD:\Opencv-project-main\CVZone\09 Object Size Measurement\yolov5s.onnxmodel Yolov5ONNX(onnx_path)or_img,box_coords model.detect(imgWarp)img utlis.dectshow(img,box_coords)cTime time.time()fps 1 / (cTime - pTime)pTime cTimecv2.putText(img, str(int(fps)), (10, 70), cv2.FONT_HERSHEY_PLAIN, 3,(255, 0, 255), 3)# 图像预处理及边缘检测# edges utlis.preprocess(img)## # 获取物体轮廓并进行多边形逼近# approx utlis.get_object_contour(edges, img)cv2.imshow(Object Detection, img)# cv2.polylines(imgContours2,[obj[2]],True,(0,255,0),2)# nPoints utlis.reorder(obj[2])# nW round((utlis.findDis(nPoints[0][0]//scale,nPoints[1][0]//scale)/10),1)# nH round((utlis.findDis(nPoints[0][0]//scale,nPoints[2][0]//scale)/10),1)### cv2.arrowedLine(imgContours2, (nPoints[0][0][0], nPoints[0][0][1]), (nPoints[1][0][0], nPoints[1][0][1]),# (255, 0, 255), 3, 8, 0, 0.05)# cv2.arrowedLine(imgContours2, (nPoints[0][0][0], nPoints[0][0][1]), (nPoints[2][0][0], nPoints[2][0][1]),# (255, 0, 255), 3, 8, 0, 0.05)# x, y, w, h obj[3]# cv2.putText(imgContours2, {}cm.format(nW), (x 30, y - 10), cv2.FONT_HERSHEY_COMPLEX_SMALL, 1.5,# (255, 0, 255), 2)# cv2.putText(imgContours2, {}cm.format(nH), (x - 70, y h // 2), cv2.FONT_HERSHEY_COMPLEX_SMALL, 1.5,# (255, 0, 255), 2)cv2.imshow(A4, img1)img cv2.resize(img,(0,0),None,0.5,0.5)cv2.waitKey(1) 图像处理及仿射变换部分代码 yolo推理部分代码 有需要的朋友欢迎私聊博主