DigiHouse
English

TECH ARTICLE · NCU · 3 MIN READ

Blog / NCU

第 36 課|使用 OpenCV 進行全景拼接

使用 OpenCV 進行全景拼接。本文已重新整理為適合 DigiHouse 閱讀的課程文章,並保留原始 PIXNET 刊載網址。

使用 OpenCV 進行全景拼接

本文展示如何利用 OpenCV 的拼接功能將多張圖片合成一張全景圖。

程式碼範例與註解

text
# 匯入必要模組
import cv2
import argparse

# 解析命令列參數
ap = argparse.ArgumentParser()
ap.add_argument('img', nargs='+', help='input images')
args = ap.parse_args()

# 加載所有輸入圖片
img_arr = []
for filename in args.img:
    image = cv2.imread(filename)
    img_arr.append(image)

# 初始化拼接器並進行拼接
stitcher = cv2.Stitcher_create()
status, pano = stitcher.stitch(img_arr)

# 驗證拼接結果
if status == cv2.Stitcher_OK:
    # 顯示與保存全景圖
    cv2.namedWindow('image', cv2.WINDOW_NORMAL)
    cv2.imshow('image', pano)
    cv2.imwrite('final.jpg', pano)
    cv2.waitKey(0)
    cv2.destroyAllWindows()
    print('done')
else:
    print('error: {}'.format(status))

程式解析

• 解析命令列參數: 使用 argparse 獲取多張輸入圖片的路徑,並將其存入列表 img_arr。

• 圖片加載: 使用 cv2.imread 加載圖片,並依序加入列表以供拼接器使用。

• 初始化拼接器: 使用 cv2.Stitcher_create() 初始化拼接器,並調用 stitch 方法執行拼接操作。

• 檢查拼接結果: 拼接完成後,根據返回的狀態碼判斷拼接是否成功: cv2.Stitcher_OK:拼接成功,繼續後續操作。

• 其他狀態碼:拼接失敗,打印錯誤信息。

• 顯示與保存全景圖: 成功拼接後,使用 cv2.imshow 顯示結果,並通過 cv2.imwrite 將全景圖保存為 final.jpg。

結論

本程式展示了如何使用 OpenCV 的拼接器進行多圖片的全景拼接。該方法適用於場景較穩定的情況,並且支持多張圖片輸入。通過適當調整圖片順序和重疊部分,可以提升拼接的準確性和效果。

劉老師的跨域創想工坊

本文亦刊載於 PIXNET

https://liusming.pixnet.net/blog/posts/14222886579