如何在Jupyter Lab中拼接无人机图像?求对应代码/脚本
无人机图像拼接Jupyter Lab可运行脚本
首先确保Jupyter Lab环境中安装了所需依赖,在代码单元格中运行:
!pip install opencv-python numpy matplotlib
以下是完整的拼接脚本,直接在Jupyter Lab代码单元格中运行即可:
import cv2 import numpy as np import matplotlib.pyplot as plt # 1. 定义待拼接的无人机图像路径列表 # 替换为你自己的图像路径,按拍摄顺序排列更佳 image_paths = [ "drone_img_1.jpg", "drone_img_2.jpg", "drone_img_3.jpg", # 可继续添加更多图像路径 ] # 2. 加载所有图像 images = [] for path in image_paths: img = cv2.imread(path) if img is not None: # OpenCV默认读入BGR格式,转为RGB方便matplotlib显示 img_rgb = cv2.cvtColor(img, cv2.COLOR_BGR2RGB) images.append(img_rgb) else: print(f"警告:无法加载图像 {path}") # 3. 初始化OpenCV拼接器 # 针对航拍图像,使用SCANS模式(专门处理扫描/航拍类全景图) stitcher = cv2.Stitcher_create(cv2.Stitcher_SCANS) # 4. 执行拼接 status, stitched_img = stitcher.stitch(images) # 5. 处理拼接结果 if status == cv2.Stitcher_OK: # 显示拼接后的全景图 plt.figure(figsize=(15, 10)) plt.imshow(stitched_img) plt.axis('off') plt.title('拼接完成的无人机全景图') plt.show() # 保存拼接结果(可选) # 转回BGR格式保存,符合常规图像文件格式 stitched_img_bgr = cv2.cvtColor(stitched_img, cv2.COLOR_RGB2BGR) cv2.imwrite("stitched_panorama.jpg", stitched_img_bgr) print("全景图已保存为 stitched_panorama.jpg") else: error_messages = { cv2.Stitcher_ERR_NEED_MORE_IMGS: "需要更多重叠的图像", cv2.Stitcher_ERR_HOMOGRAPHY_EST_FAIL: "图像匹配失败,可能重叠度不足", cv2.Stitcher_ERR_CAMERA_PARAMS_ADJUST_FAIL: "相机参数调整失败" } print(f"拼接失败,错误码:{status},原因:{error_messages.get(status, '未知错误')}")
关键注意事项
- 图像顺序:尽量按无人机飞行时的拍摄顺序排列图像,有助于提升拼接成功率
- 重叠度:确保相邻图像有至少20%-30%的重叠区域,这是拼接成功的前提
- 图像尺寸:如果图像过大导致内存不足,可以先对图像进行缩放处理(比如用
cv2.resize()) - 光照一致性:尽量保证拍摄时光照变化小,避免拼接后出现明显的明暗断层
内容的提问来源于stack exchange,提问作者Edy Trihatmoko
相关产品推荐
相关产品推荐

