簡體   English   中英

如何在 OpenCV Python Stitcher 類中設置全景模式?

[英]How to Set Panorama Mode in OpenCV Python Stitcher Class?

基於這個問題/答案,我一直在嘗試在 python 中使用 OpenCV 的 Stitcher 類。 我的代碼與答案中的代碼基本相同。

import cv2

stitcher = cv2.createStitcher(False)
foo = cv2.imread("D:/foo.png")
bar = cv2.imread("D:/bar.png")
result = stitcher.stitch((foo,bar))

cv2.imwrite("D:/result.jpg", result[1])

問題是我想將模式從全景更改為掃描。 在 c++ 文檔中, create 方法有一個 mode 輸入。 然而,Python 中的 createStitcher 類只需要一個輸入——是否嘗試 gpu。 有沒有辦法在 Python 中指定模式?

當我嘗試 createStitcherScans 時,出現錯誤

stitcher = cv2.createStitcherScans(False)
"AttributeError: 'module' object has no attribute 'createStitcherScans'"

我確實發現這個 GitHub 問題似乎很相關,關於 Python 綁定缺少一些東西。 但這超出了我的頭腦,我不確定如何編輯 opencv 代碼以正確執行此操作。 我嘗試將其添加到拼接.hpp:

typedef Stitcher::Mode Mode;

但什么也沒發生。 createStitcher(1, False) 仍然給我屬性錯誤。 任何幫助將不勝感激。

這已在 Open CV 4 中解決(至少在我正在運行的 4.1.0 中)。 您現在可以將mode指定為cv2.Stitcher.create的關鍵字參數:

stitcher = cv2.Stitcher.create(mode = 1)

似乎尚未移植不同模式的枚舉標簽,但它適用於數字。 PANORAMA0SCANS1所定義此處

請注意,如果您正在使用 Google Colab,那么您可以像這樣更改 Open CV 的版本:

!pip3 install opencv-python==4.1.0.25

我有相同的問題。 查看文檔后,看起來 python 包裝器函數沒有映射到 create(),而是 createDefault(),它沒有模式輸入,只有 try_use_gpu 輸入。 我沒有使用包裝器的經驗,但可以嘗試通過閱讀OpenCV 的關於 python 綁定如何工作的信息來弄清楚。

基於我迄今為止在 python 中使用針跡的工作,似乎 createDefault() 在 PANORAMA 模式下創建了一個拼接器,因為它正在扭曲我的圖像。 我不能把工作時間花在瀏覽包裝上,但如果我最終花個人時間來修復它,我會在這里更新我的答案。

在 GitHub samples/python/stitching.py上查看 Python 的官方測試代碼,您可以使用Stitcher_PANORAMAStitcher_SCANS 您可以隨時檢查任何模塊的測試代碼,例如本例中的modules/stitching/misc/python/test

stitcher = cv.Stitcher.create(cv.Stitcher_PANORAMA)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM