当前位置: 首页 > news >正文

SLAM从入门到精通(被忽视的基础图像处理)

【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing @163.com】

        工业上用激光slam的多,用视觉slam的少,这是大家都知道的常识。毕竟对于工业来说,健壮和稳定是我们必须要考虑的事情。但是图像slam在这过程当中其实也可以扮演十分重要的角色,比如说地面如果非常有特征的话,黄色路面或者绿色路面。这个时候,即使全局的slam完成不了,那么也可以实现局部道路的slam导航。

        ros里面其实也谈到了opencv,它是一个用的比较多的开发库。但是很多时候,上面的demo都是比较割裂的,很难说这是用于实际场景的代码。比如说,平时比较常用的二维码导航,上面就谈的不是很多。所以,对于这些知识点,我们都可以自己编写opencv程序来解决。

        目前在ubuntu20.04上面,ros noetic版本自带的是opencv 4版本了,这个需要注意下了。另外,实际图像开发的时候,光源很重要。如果光源不满足条件,可以自己编写代码,比如利用最大灰度值做pwm的pid反馈参考量,这都是有实际意义的。

1、编写测试代码

        这段代码来自于网上。主要还是为了说明opencv如何编写代码,有兴趣的同学可以去买一本opencv的书来进行学习和研究。

#include <opencv4/opencv2/highgui/highgui.hpp>
#include <opencv4/opencv2/imgcodecs/legacy/constants_c.h>
#include <iostream>
using namespace std;int main( int argc, char** argv ) {cv::Mat image;image = cv::imread("test.jpg" , CV_LOAD_IMAGE_COLOR);	      if(! image.data ) {std::cout <<  "Could not open or find the image" << std::endl ;return -1;}std::cout << "image wide: "<< image.cols << ",image high: " << image.rows << ",image channels: "<< image.channels() << std::endl;/* display imagecv::namedWindow( "Display window", cv::WINDOW_AUTOSIZE );cv::imshow( "Display window", image );		    cv::waitKey(0);*/size_t y,x;// y is row, x is colint c;     // c is channely = x = 250;c = 2;// row_ptr is the head point of y rowunsigned char *row_ptr = image.ptr<unsigned char>(y);// data_ptr points to pixel dataunsigned char *data_ptr = &row_ptr[x * image.channels()]; unsigned char data =  data_ptr[c];// use cv::Mat::at() to get the pixel value// unsigned char is not printable// std::cout << std::isprint(data)<<std::isprint(image.at<cv::Vec3b>(y,x)[c]) << std::endl;std::cout << "pixel value at y, x ,c"<<static_cast<unsigned>(image.at<cv::Vec3b>(y,x)[c]) << std::endl;return 0;
}

2、代码说明

        代码的内容不复杂,主要就是打开一幅图片,然后获取指定点的像素信息。当然,这份代码只是起到抛砖引玉的作用,真正用起来,还需要和具体的场景关联起来。

3、编译方法

        前面我们说过,ros noetic里面支持的是opencv 4,所以这里代码也是用opencv4的库进行编译的,输入如下所示,

g++ test.cpp -o test `pkg-config --cflags --libs opencv4`

4、测试和调试

        代码测试的过程中,还需要一张图片,我们不妨去网上搜索一下lena的图片。她也是数字图像处理中用的最多的一张图片,

        这样程序和图片都准备好了,执行后不出意外的话,就可以看到这样的打印,

shell$ ./test
image wide: 500,image high: 500,image channels: 3
pixel value at y, x ,c177

5、python3实现图像处理

        实际生产中,一般是用python编写好算法之后,再转换成c/c++代码,这样效率要高很多。另外,不管是windows平台,还是linux平台,使用python都是很方便的。

import cv2def main():picture = cv2.imread('./test.jpg')cv2.imshow('lena', picture)cv2.waitKey(0)cv2.destroyAllWindows()if __name__ == '__main__':main()

        运行的方法,也比较简单,直接输入python3 ./test.py即可。

相关文章:

  • STM32笔记—DMA
  • 2023年十大地推拉新接单平台和网推接单平台,都是一手单
  • mac电脑系统清理软件CleanMyMac X2024破解版下载
  • MySQL的备份恢复
  • Flink SQL DataGen Connector 示例
  • Git使用规范指南
  • 在 ASP.NET C# 中用Aspose.PDF将 PDF 页面转换为 JPG 图像
  • 浅谈电力物联网时代物联网技术在电力系统中的应用
  • 8年资深测试总结,接口自动化框架的设计与实现,一文打通...
  • Go:如何在GoLand中引用github.com中的第三方包
  • 关于Alibaba Cloud Toolkit 下载配置以及后端自动部署
  • RT-DETR 应用 BiFPN 结构 | 加权双向特征金字塔网络
  • 【pytorch源码分析--torch执行流程与编译原理】
  • java高级之单元测试、反射
  • 常见面试题-TCP三次握手四次挥手
  • 【391天】每日项目总结系列128(2018.03.03)
  • 【MySQL经典案例分析】 Waiting for table metadata lock
  • 〔开发系列〕一次关于小程序开发的深度总结
  • CNN 在图像分割中的简史:从 R-CNN 到 Mask R-CNN
  • extract-text-webpack-plugin用法
  • JSDuck 与 AngularJS 融合技巧
  • js写一个简单的选项卡
  • mongodb--安装和初步使用教程
  • mysql中InnoDB引擎中页的概念
  • PHP的Ev教程三(Periodic watcher)
  • webpack项目中使用grunt监听文件变动自动打包编译
  • 彻底搞懂浏览器Event-loop
  • 高程读书笔记 第六章 面向对象程序设计
  • 给新手的新浪微博 SDK 集成教程【一】
  • 看域名解析域名安全对SEO的影响
  • 判断客户端类型,Android,iOS,PC
  • 深入体验bash on windows,在windows上搭建原生的linux开发环境,酷!
  • 小程序01:wepy框架整合iview webapp UI
  • 小程序上传图片到七牛云(支持多张上传,预览,删除)
  • 一、python与pycharm的安装
  • Unity3D - 异步加载游戏场景与异步加载游戏资源进度条 ...
  • 关于Kubernetes Dashboard漏洞CVE-2018-18264的修复公告
  • #NOIP 2014# day.1 T3 飞扬的小鸟 bird
  • ${factoryList }后面有空格不影响
  • (2020)Java后端开发----(面试题和笔试题)
  • (附源码)springboot家庭装修管理系统 毕业设计 613205
  • (三分钟了解debug)SLAM研究方向-Debug总结
  • (一)VirtualBox安装增强功能
  • (原创)Stanford Machine Learning (by Andrew NG) --- (week 9) Anomaly DetectionRecommender Systems...
  • (原創) 系統分析和系統設計有什麼差別? (OO)
  • (转) Face-Resources
  • (转载)CentOS查看系统信息|CentOS查看命令
  • * 论文笔记 【Wide Deep Learning for Recommender Systems】
  • .NET 3.0 Framework已经被添加到WindowUpdate
  • .net core 微服务_.NET Core 3.0中用 Code-First 方式创建 gRPC 服务与客户端
  • .NET Framework杂记
  • .Net MVC + EF搭建学生管理系统
  • .Net Remoting(分离服务程序实现) - Part.3
  • .NET/ASP.NETMVC 深入剖析 Model元数据、HtmlHelper、自定义模板、模板的装饰者模式(二)...
  • .NET/C# 解压 Zip 文件时出现异常:System.IO.InvalidDataException: 找不到中央目录结尾记录。