SLAM数据集序列图片如何批量处理
SLAM数据集序列图片如何批量处理
原创:SLAM爬坑之行
引言:在SLAM学习过程中,有时候需要对大量的数据集比如TUM/KITTI等图片序列进行批量处理,这个时候需要用到opencv中的函数对图像进行批量处理的话,会大大减少我们的时间,提高工作效率。
详细流程:
1、数据集下对大批量图片文件名的导出
我们采用的是TUM实验室中的rgbddatasetfreiburg2pioneerslam的RGB图像序列,每当看见这些密密麻麻的数据图像的时候,就会有一种无力感,所以需要批量处理。[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-W9k03k7b-1592542839980)(D:\SLAM\SLAM基础\文章\rgbseires.png)]
1、使用ls >命令将目录RGB(根据实际情况进行更改)中的图片名列举出来,然后利用>将文 件名重定向到test.txt中(.txt的名字可根据需要自定义),效果入下图,可以看见rgb中的图像序列已经被保存,终端输入下列指令后结果如下图所示
ls rgb >text.txt

2、利用opencv实现批量图像的处理工作
#include <iostream>
#include<opencv2/opencv.hpp>
#include<iostream>
#include<time.h>
#include<fstream>
#include<string>
int main(){
//! 指定文件夹路径
std::string path = "C:\\Users\\12692\\Source\\Repos\\picture_process\\seires.txt";
std::ifstream file(path);
int img_index = 0;
char img_infile[100], img_savefile[100];
//!函数file.eof(),如果没到文件末尾,返回值为0;当读取两百个图像时,停止读取
while (!file.eof() && img_index < 200) {
//图像名称
char img_name[500];
//getline()读取一行,内容存放在img_name[0],读取的最大字节数为500
file.getline(img_name, 500);
//将字符串img_name标准化打印到img_infile中
sprintf_s(img_infile, "../rgb/%s", img_name);
sprintf_s(img_savefile, "../save/tum%03d.png", img_index);
cv::Mat src = cv::imread(img_infile);
cv::Mat imgGray;
//将彩色图像处理成灰度图
cvtColor(src, imgGray, CV_BGR2GRAY);
img_index++;
//写入序列图片
cv::imwrite(img_savefile, imgGray);
}
}
下图是处理后的图像,这样就可以我们就可以看见原文件rgb中的200张彩色图像被批量处理成灰度图并且重命名。

3、常用举例按规律读取并显示
数据集命名规则如下所示,下列程序将按照序列号名称顺序读取 
#include<opencv2/core/core.hpp>
#include<stdio.h>
#include<stdlib.h>
#include<opencv2/imgproc/imgproc.hpp>
#include<opencv2/highgui/highgui.hpp>
#include<iostream>
#include <fstream>
using namespace std;
using namespace cv;
int main() {
//先读取100张图试试看
for(int i = 1 ; i < 100; i++) {
//使用SetFileNames()方法读取序列图像。
Mat srcGray;
char img_name[200];
sprintf(img_name, "../PATH/TUM%03d.jpg", i);//%05d代表文件名的宽度
srcGray = imread(imgname, 0);
cout << i << endl;
imshow("读取", srcGray);
waitKey(122);
}
return 0;
}
4、写入序列图片
char path[200];
sprintf(path, "../save/%d.jpg", i);
Mat edgeMat;
imwrite(path, edgeMat);
SLAM数据集序列图片如何批量处理的更多相关文章
- php base64数据与图片的转换
		
1.解析base64数据成图片 The problem is that data:image/bmp;base64, is included in the encoded contents. This ...
 - PLSQL程序编写杂烦数据表信息编写批量排版
		
--PLSQL程序编写杂烦数据表信息编写批量排版 SELECT 'cra.' || lower(t.column_name) ||',' FROM dba_tab_columns t WHERE t. ...
 - Python3.7 练习题(三) 将指定目录下的图片进行批量尺寸大小处理
		
# 将指定目录下的图片进行批量尺寸大小处理 #修改图片尺寸 导入Image os 快捷键 alt+enter import os from PIL import Image def process_i ...
 - PHP base64数据与图片的互相转换
		
1.解析base64数据成图片 The problem is that data:image/bmp;base64, is included in the encoded contents. This ...
 - C++ 根据图片url  批量 下载图片
		
最近需要用到根据图片URL批量下载到本地的操作.查找了相关资料,记录在这儿. 1.首先在CSV文件中提取出url ifstream fin("C:\\Users\\lenovo\\Deskt ...
 - 使用FormData数据做图片上传: new FormData()       canvas实现图片压缩
		
使用FormData数据做图片上传: new FormData() canvas实现图片压缩 ps: 千万要使用append不要用set 苹果ios有兼容问题导致数据获取不到,需要后台 ...
 - ASP.NET MVC中使用Dropzone.js实现图片的批量拖拽上传
		
说在前面 最近在做一个MVC相册的网站(这里),需要批量上传照片功能,所以就在网上搜相关的插件,偶然机会发现Dropzone.js,试用了一下完全符合我的要求,而且样式挺满意的,于是就在我的项目中使用 ...
 - 图片尺寸批量resize的matlab并行代码
		
在caffe ImageNet例子中有对图片进行resize的部分,文中使用的是linux shell脚本命令: for name in /path/to/imagenet/val/*.JPEG; d ...
 - PLSQL_数据泵定参数批量导入多表Expdp/Impdp Parfile(案例)
		
2015-04-01 Created By BaoXinjian
 
随机推荐
- C#日志记录类
			
public class WriteLog { /// <summary> /// 将错误写入文件中 /// </summary> /// <param name=&qu ...
 - Multisim-74LS08\74LS02\74LS86逻辑功能仿真实验
			
一. 实验目的 了解TTL门电路的外观封装.引脚分布和使用方法. 掌握数字电路试验台.万用表和示波器的使用方法. 掌握TTL与门.或非门和异或门的逻辑功能. 认识门电路对信号的控制作用. 二.实验内容 ...
 - 用 CSS Grid 布局制作一个响应式柱状图
			
最新一段时间比较喜欢玩弄图表,出于好奇,我想找出比较好的用 CSS 制作图表的方案.开始学习网上开源图表库,它对我学习新的和不熟悉的前端技术很有帮助,比如这个:CSS Grid. 今天和大家分享我学到 ...
 - indetityserver4-implicit-grant-types-请求流程叙述-下篇
			
上一篇将请求流程描述一遍,这篇将描述一下相关的源码. 1 访问客户端受保护的资源 GET /Home/Secure HTTP/1.1HTTP/1.1 302 Found Date: Tue, 23 O ...
 - 深入理解JS:执行上下文中的this(二)
			
目录 序言 Function.prototype.bind() 方法 箭头函数 参考 1.序言 在 深入理解JS:执行上下文中的this(一) 中,我们主要深入分析全局环境和函数环境中函数调用的 th ...
 - Pytorch分类和准确性评估--基于FashionMNIST数据集
			
最近在学习Pytorch v1.3最新版和Tensorflow2.0. 我学习Pytorch的主要途径:莫烦Python和Pytorch 1.3官方文档 ,Pytorch v1.3跟之前的Pytorc ...
 - Java中方法的重载与重写
			
1.方法的名字和参数列表称为方法的签名:每个方法具有唯一与其对应的签名: 2.方法的重载:在某个类中,存在具有多个相同名字不同参数列表的方法,称之为重载: 被重载的方法必须改变参数列表(参数个数或类型 ...
 - Jmeter(六) - 从入门到精通 - 建立数据库测试计划(详解教程)
			
1.简介 在实际工作中,我们经常会听到数据库的性能和稳定性等等,这些有时候也需要测试工程师去评估和测试,因此这篇文章宏哥主要介绍了jmeter连接和创建数据库测试计划的过程,宏哥在文中通过示例和代码非 ...
 - Rocket - tilelink - RegionReplicator
			
https://mp.weixin.qq.com/s/XZVCdt50tM6lavchGm9GRg 简单介绍RegionReplicator的实现.  1. 基本介绍 根据mask ...
 - Python环境搭建—安利Python小白的Python和Pycharm安装详细教程
			
人生苦短,我用Python.众所周知,Python目前越来越火,学习Python的小伙伴也越来越多.最近看到群里的小伙伴经常碰到不会安装Python或者不知道去哪下载Python安装包等系列问题,为了 ...