vs2019 基于pcl和opencv的体积检测算法 zed版本+安卓端新手版(一)

2023-10-10 04:10

本文主要是介绍vs2019 基于pcl和opencv的体积检测算法 zed版本+安卓端新手版(一),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

vs2019 基于pcl和opencv的体积检测算法 zed版本+安卓端新手版(一)

  • 写在前面的话
  • 配置
  • 环境配置
  • 代码

写在前面的话

最近的一个小项目,图像方面的算法开发,题目是:深度相机体积测量算法,最终目标是用在安卓端做体积测量,给快递公司用。体积检测算法的源码是参考PointCloudVolumeMeasure的,使用俯拍的方式进行得到物体的长宽高进行估计的,所以如果是测没有长宽高的物体可能目前还做不到,看了很多的论文,因为要求比较快,所以直接拿了网上的代码作为参考。

如果有时间的话也可以用很多别的方法:比方 Potato volume measurement based on RGB-D camera,这是一种从两面投影的体积积分算法,要两台深度相机和比较大的场所,精度比这个高;
还有 Volume measurement with a consumer depth camera based on structured infrared lightFood Volume Estimation for Quantifying Dietary Intake with a Wearable Camera 是用slam三维重构的方法,需要平台,算法比较复杂;
还有VOLUMNECT - Measuring Volumes with Kinect用Harris探测器计算多个相交平面计算长宽高的方法,可以在任意角度拍摄计算体积,不过精度就一般般。
在这里就不多说了,进入正题。

配置

系统:Win10
CPU:i7-8700
显卡:GTX1650(显存4G,好像最后也没用GPU算啥,还是写出来吧)
内存:16G

环境配置

PCL
第一次用c++,全蒙呀,只要硬着头皮上了,少啥装啥,用pcl算肯定要配置pcl(废话),参考网址VS2017配置PCL1.9(win10环境) (为啥不找vs2019,因为太新没教程。。。还有,19和17都使用v141平台工具集,凑活儿参考。。),pcl依赖的库在安装时候大多都安装好了,配置好环境变量就行。

OPENCV
pcl可以完成很多的图像处理功能,但是一般机器视觉很多关于图像预处理方面的功能还是要用opencv,所以配置一下吧,参考网址windows 下OpenCV的安装部署详细教程,release、debug版本不要弄错。

ZED
由于我使用zed相机做的pc端开发,所以要配置一下zed,参考网址zed双目相机的windows配置,zed摄像头用的时候一定要用到GPU,所以把CUDA装一下,我装的10.0,参考网址CUDA10安装,配合使用VS2017。

cmake-gui
安装它主要是因为zed本身带有对pcl的接口,可以直接用cmake-gui创建对应的c++工程(配置好的环境),cmake-gui的cmakelist路径在(ZED/ZED SDK/samples/interfaces/pcl),Configure(1)然后Generate(2)一下,可能会遇到一些错,大部分都是路径没配置好导致的可以打开Grouped(3)、Advanced(4)查看一下,在列表里把路径写错的改好,少啥再装装。(我这个是最近配置tf的,路径没有参考价值哈)
在这里插入图片描述

代码

体积检测算法的源码是参考PointCloudVolumeMeasure,但是这个代码是使用kinect双目摄像头检测的,输入不一样,源码是用pcl中XYZ的深度点进行计算的,但是ZED大多数的例子都是用Point-XYZ-RGB的输入格式,所以多数的输入参考代码都用不上,最后查到了一个github(万能的github)的例子是ZED输入转化为Point-XYZ的输入格式。参考网址:euclidean-clustering-pcl-zed(谢谢git爸爸救我),由于有这个项目目前可能还要用,我这边的源码不能贴出来抱歉,最后把opencv配置好,应该就能跑了。pcl显示出来的窗口可能是大块的红绿,不用担心,用鼠标滚轮滚一下就可以了。

下面,上图:测的还是挺准的

(忽略我就是这么拿着摄像头测的。。。)

手持拍照设备
结果

换个角度看看
第一次写博客,还是想养成一个习惯,把自己做的东西慢慢的都记下来,不是为了炫耀或者吹嘘,是真的希望能给和我一样遇到困难的人一些帮助,写的不好的地方多多海涵,这个项目ZED开发完大概花了我两周的时间,精度在做均值平滑以后5%以内,算蒙混过关,后面等有时间慢慢把往安卓端移植的工作写上来。

附上一些编程调试过程中有帮助或者不错的参考网址:
pcl常用小知识和几何计算
3维Harris角点提取pcl实现
PCL几种采样方法
PCL+OpenCV+WebCam实现模拟深度图像实时点云数据采集
PCL学习笔记
PCL中访问点云数据点的几种方式
PCL代码经典赏析七:PCL 点云特征描述与提取
PCL系列之——点云读取与显示
有任何不明白的问题的可以在下面问我,有空的话会第一时间解答哒~

这篇关于vs2019 基于pcl和opencv的体积检测算法 zed版本+安卓端新手版(一)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/177837

相关文章

golang1.23版本之前 Timer Reset方法无法正确使用

《golang1.23版本之前TimerReset方法无法正确使用》在Go1.23之前,使用`time.Reset`函数时需要先调用`Stop`并明确从timer的channel中抽取出东西,以避... 目录golang1.23 之前 Reset ​到底有什么问题golang1.23 之前到底应该如何正确的

SpringBoot使用Apache Tika检测敏感信息

《SpringBoot使用ApacheTika检测敏感信息》ApacheTika是一个功能强大的内容分析工具,它能够从多种文件格式中提取文本、元数据以及其他结构化信息,下面我们来看看如何使用Ap... 目录Tika 主要特性1. 多格式支持2. 自动文件类型检测3. 文本和元数据提取4. 支持 OCR(光学

IDEA如何切换数据库版本mysql5或mysql8

《IDEA如何切换数据库版本mysql5或mysql8》本文介绍了如何将IntelliJIDEA从MySQL5切换到MySQL8的详细步骤,包括下载MySQL8、安装、配置、停止旧服务、启动新服务以及... 目录问题描述解决方案第一步第二步第三步第四步第五步总结问题描述最近想开发一个新应用,想使用mysq

java脚本使用不同版本jdk的说明介绍

《java脚本使用不同版本jdk的说明介绍》本文介绍了在Java中执行JavaScript脚本的几种方式,包括使用ScriptEngine、Nashorn和GraalVM,ScriptEngine适用... 目录Java脚本使用不同版本jdk的说明1.使用ScriptEngine执行javascript2.

Java中的Opencv简介与开发环境部署方法

《Java中的Opencv简介与开发环境部署方法》OpenCV是一个开源的计算机视觉和图像处理库,提供了丰富的图像处理算法和工具,它支持多种图像处理和计算机视觉算法,可以用于物体识别与跟踪、图像分割与... 目录1.Opencv简介Opencv的应用2.Java使用OpenCV进行图像操作opencv安装j

Python中的随机森林算法与实战

《Python中的随机森林算法与实战》本文详细介绍了随机森林算法,包括其原理、实现步骤、分类和回归案例,并讨论了其优点和缺点,通过面向对象编程实现了一个简单的随机森林模型,并应用于鸢尾花分类和波士顿房... 目录1、随机森林算法概述2、随机森林的原理3、实现步骤4、分类案例:使用随机森林预测鸢尾花品种4.1

Debian如何查看系统版本? 7种轻松查看Debian版本信息的实用方法

《Debian如何查看系统版本?7种轻松查看Debian版本信息的实用方法》Debian是一个广泛使用的Linux发行版,用户有时需要查看其版本信息以进行系统管理、故障排除或兼容性检查,在Debia... 作为最受欢迎的 linux 发行版之一,Debian 的版本信息在日常使用和系统维护中起着至关重要的作

opencv实现像素统计的示例代码

《opencv实现像素统计的示例代码》本文介绍了OpenCV中统计图像像素信息的常用方法和函数,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一... 目录1. 统计像素值的基本信息2. 统计像素值的直方图3. 统计像素值的总和4. 统计非零像素的数量

你的华为手机升级了吗? 鸿蒙NEXT多连推5.0.123版本变化颇多

《你的华为手机升级了吗?鸿蒙NEXT多连推5.0.123版本变化颇多》现在的手机系统更新可不仅仅是修修补补那么简单了,华为手机的鸿蒙系统最近可是动作频频,给用户们带来了不少惊喜... 为了让用户的使用体验变得很好,华为手机不仅发布了一系列给力的新机,还在操作系统方面进行了疯狂的发力。尤其是近期,不仅鸿蒙O

什么是 Ubuntu LTS?Ubuntu LTS和普通版本区别对比

《什么是UbuntuLTS?UbuntuLTS和普通版本区别对比》UbuntuLTS是Ubuntu操作系统的一个特殊版本,旨在提供更长时间的支持和稳定性,与常规的Ubuntu版本相比,LTS版... 如果你正打算安装 Ubuntu 系统,可能会被「LTS 版本」和「普通版本」给搞得一头雾水吧?尤其是对于刚入