1、主要参考
(1)大佬的视频
Create Point Clouds With Your Smartphone_哔哩哔哩_bilibili
2、视频和图片的获取
2.1用手机拍摄一段视频
站着不动,找个特征多一点的地方,比如对着一栋大楼。手持手机,以身体为中心,旋转拍摄一小段视频,本次测试视频10s。
2.2写个小脚本,将视频转换为tiff格式
#引入opencv模块
import cv2 as cv
videofile = "D:\\RGBD_CAMERA\\python_3d_process\\video\\VID_20221204_104946.mp4"
imgpath= "D:\\RGBD_CAMERA\\python_3d_process\\tiffimage\\"
cap = cv.VideoCapture(videofile)
# fps = cap.get(cv.CAP_PROP_FPS)
icount = 0
# namebase = 3150000
# namebase = 3160000
# namebase = 3170000
# namebase = 3180000
# namebase = 3190000
# namebase = 3200000
namebase = 1
#先创建窗口,这时候可以调整大小了
cv.namedWindow("video",cv.WINDOW_NORMAL)
while (True):
# 读帧
ret, frame = cap.read()
icount = icount +1
if ret is None:
break
# 保存图像
# if icount %5 == 0:
namebase = namebase +1
cv.imwrite(imgpath+str(namebase)+".tiff",frame)
cv.imshow("video", frame)
cv.waitKey(3)
# if cv2.waitKey(int(1000 / fps)) & 0xFF == ord('q'):
# break
# 释放cap
cap.release()
# 关闭窗口,清除程序所占用的内存
cv.destroyAllWindows()
2.3 10s的视频得到了312张图
3 工具用起来
3.1 Agisoft Metashape
(1)下载一个,有试用版
(2)其它下载请勿用于商业用途
3.2 使用过程
(1)点击Workflow/Add Phots在跳出的窗口中选择所有文件
(2)点击Workflow/Align Photos
(3)在跳出的窗口中选择Medium和Sequential,而后点击OK
(1)最终使用了如下操作,没有勾选Generic preselection并选择High
(2)如下简单操作没有选用,不然会告诉我部分图片失败....
(4)耐心等待完成
(5)点击Workflow/Build Dense Cloud
(6)在跳出的窗口中选择如下
(1)选用了如下选项
(2)没有使用如下选项
(7)点击Ok后耐心等待
(8)计算完毕后可以使用Model/View Mode/Dense Cloud看一波
(9)最后导出一下获得的点云File/Export/Export Points...
(10)存为各种类型都行,本次存为.pcd格式
4、显示一下
(1)测试代码
# pip install -i https://pypi.tuna.tsinghua.edu.cn/simple open3d
# pip install open3d -i https://pypi.tuna.tsinghua.edu.cn/simple
#xachen 显示可以了,20221128
import open3d as o3d
import numpy as np
# path = "D:/RGBD_CAMERA/python_3d_process/1_hezi.pcd"
path = "D:/RGBD_CAMERA/python_3d_process/chenmobile.pcd"
pcd = o3d.io.read_point_cloud(path) # path为文件路径
o3d.visualization.draw_geometries([pcd],
window_name="窗口名字测试",
point_show_normal=False,
width=800, # 窗口宽度
height=600) # 窗口高度
(2)显示结果,感觉怪怪的