赞
踩
这里没有使用程序将ZED2双目相机拍摄成两幅画面,而是直接使用软件拍摄视频。若有大佬有相关代码还是很希望能发我下。
拍的视频 如下图,左右目在同一个画面中
既然是直接用相机拍摄的图片,一幅画面里就包含了两个摄像头的画面,可以使用PR将画面切割成两个视频。
1、导入PR
2、进行裁剪
选取/视频效果/变化中的剪裁,拖到右下角视频序列上,修改剪裁比例即左边50%或者右边50%
3、导出
修改视频高度和宽度,导出即可。
注意:这里鼠标放到画面上会显示长宽的像素比,调整的时候注意一点就可以了。分别导出两次即左右目的画面。
之前用过PR将视频逐帧输出,这种方式也是可以的,即在PR中选择导出格式为PNG等格式就可以,还可以调整导出的帧率,最高60帧输出一张图片。
注意:如果使用PR导出图片,不推荐视频长度过程,容易出现错误,渲染错误啥的挺烦的。
这里就使用程序进行导出了,在ubuntu20.04下进行操作的,代码应该通用的
opencv-python程序 change.py:用于将视频导成图片
#codingutf-8 import os import cv2 import numpy as np def getName(num): strTmp = [] strRes = '' while(num/10): strTmp.append(num % 10) num = num/10 strTmp.append(num) n = len(strTmp) for i in range(0,5-n): strRes = strRes + '0' for i in range(n-1,-1,-1): strRes = strRes + str(strTmp[i]) return strRes videoCapture = cv2.VideoCapture('haha_2.mp4') #获得码率及尺寸 fps = videoCapture.get(cv2.CAP_PROP_FPS) size = (int(videoCapture.get(cv2.CAP_PROP_FRAME_WIDTH)), int(videoCapture.get(cv2.CAP_PROP_FRAME_HEIGHT))) #读帧 if not os.path.exists('image_1'): os.makedirs('image_1') success, frame = videoCapture.read() idx = 1 i = 0 timeF = 30 #视频间隔帧数 save_dir = '/home/zhou/dataset_my/image_1/' while success: cv2.imshow("显示", frame) #显示 # cv2.waitKey( 1000 /int(fps) ) #延迟报错 cv2.waitKey( 1 ) #延迟 即间隔时间 单位为毫秒 filename = 'zed'+ str(idx) if(idx%timeF == 0): cv2.imwrite(save_dir + str(i).zfill(6) + '.png',frame) #名字正确了 print(save_dir + str(i).zfill(6) + '.png') #str(idx).zfill(5) 转字符串 格式化长度 i = i + 1 success, frame = videoCapture.read() #获取下一帧 idx = idx + 1
在ubuntu下运行程序:
分割图片:修改文件名和位置即可,间隔帧率修改timeF
1、给change.py增加权限
chmod 775 change.py
2、进行图片分割
python3 change.py #具体用python还是python3看自己
opencv-python程序 text.py:用于导出time.txt时间序列
import os def getName(num): strTmp = [] strRes = '' while(num / 10): strTmp.append(num % 10) num = num / 10 strTmp.append(num) n = len(strTmp) for i in range(0,5-n): strRes = strRes + '0' for i in range(n-1,-1,-1): strRes = strRes + str(strTmp[i]) return strRes file_object = open('times.txt','w') #w:打开一个文件只用于写入。如果该文件已存在则打开文件,并从开头开始编辑,即原有内容会被删除。如果该文件不存在,创建新文件。 Ostr = '' num = len(os.listdir('image_0')) for i in range(0,num): name = str(i).zfill(6) Ostr = Ostr + name +' '+ name + '.png\n' file_object.writelines(Ostr) file_object.close()
提取时间序列,这个时间序列还是有点问题的,不是真正的时间,就是0到n
chmod 775 test.py
执行程序
python3 test.py
即可生成对应的文件,这里因为使用的是双目相机,所以参考KITTI数据集将左目右目分别放在两个文件夹中
KITTI数据集中calib.txt文件是畸变参数文件,这里因为没有用,所以暂时先没管。
times.txt即为生成的时间序列文件。
1、标定
运行自己的数据集就得有自己相机得yaml文件,即相机得参数。
标定很早之前就做了,参考的是
标定参数详解:
https://blog.csdn.net/weixin_37918890/article/details/95626004
标定过程参考:
https://blog.csdn.net/pj_find/article/details/106171407
标定的时候还是有个小疑问的,就是相机bf基线这个怎么确定,因为没有用opencv标定就暂且有问题。
2、运行数据集
./Examples/Stereo/stereo_kitti Vocabulary/ORBvoc.txt Examples/Stereo/my_zed.yaml /home/nvidia/Desktop/dataset/001
运行的时候发现特征点特别容易丢失,应该是图片质量的问题。不过起码能运行了就很好
Tracking.cc :: Track(), Now mState is LOST.
Track lost soon after initialisation, reseting…
System Reseting
Reseting Local Mapper… done
Reseting Loop Closing… done
Reseting Database… done
2021.05.25
第一次把视频分割这些弄完,数据集的话因为这次拍的视频效果不行,暂时还需要重新拍摄,所以先把后续步骤弄清楚。
2021.05.26
修改下代码,重新上传。可运行数据集,但是要重新录制
此文目的是学习SLAM,只是记录一下,欢迎各位大神前来指点
参考:https://blog.csdn.net/weixin_44436677/article/details/105620262
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。