Python Opencv實踐 - 全景圖片拼接stitcher

做一個全景圖片切片的程序Spliter

????????由于手里沒有切割好的全景圖片資源,因此首先寫了一個切片的程序spliter。

? ? ? ? 如果有現成的切割好的待拼接的切片文件,則不需要使用spliter。

? ? ? ? 對于全景圖片的拼接,需要注意一點,各個切片圖片之間要有重復的內容以便opencv能夠提取到關鍵點并能匹配上。如果簡單地將全景圖均分幾乎是不可能成功的,stitcher一般會返回錯誤1(ERR_NEED_MORE_IMGS)。下面是我寫的切片程序spliter代碼,僅供參考:

import cv2 as cv
import numpy as np
import matplotlib.pyplot as pltimg = cv.imread('../../SampleImages/panoramaOriginal.jpg')
numSlices = 5
print(img.shape)
(height,width,channels) = img.shapesliceWidth = width / numSlices
#全景拼接需要匹配兩幅圖中的特征點,因此需要預留一部分重復的列
#sliceDuplicateOffset設置了兩幅圖重復的列的數量
sliceDuplicateOffset = sliceWidth / 2
print(sliceWidth)
sliceStartX = 0
for i in range(0, numSlices):sliceX = sliceStartX;#第一個切片不需要減去sliceDuplicateOffsetif (sliceStartX != 0):sliceX = sliceX - sliceDuplicateOffsetimgSlice = img[0:height,int(sliceX):int(sliceStartX + sliceWidth)]sliceStartX += sliceWidthcv.imwrite('panoramaSlice' + str(i) + ".jpg", imgSlice, [cv.IMWRITE_JPEG_QUALITY,100])

? ? ? ? 我下載的原始全景圖片為:

? ? ? ? 經過spliter切片后

讀取切片文件使用Stitcher進行拼接

? ? ? ? 將切片文件全部放到相同目錄下,通過os庫進行讀取放到一個list中,然后使用Stitcher進行拼接,代碼如下:

import cv2 as cv
import numpy as np
import matplotlib.pyplot as plt
import osslices = []
imageDir = '../../SampleImages/panoramaSlices/'
imageFiles = os.listdir(imageDir)
#讀取所有切片文件
for file in imageFiles: img = cv.imread(imageDir+file)slices.append(img)#plt.imshow(slices[0])#創建stitcher對象
#cv.Stitcher.Create()
#參考資料:https://blog.csdn.net/qq_41112170/article/details/124634544
stitcher = cv.Stitcher.create()
#調用stitch做全景拼接
#參考資料:https://blog.csdn.net/weixin_48911487/article/details/122721333
#         https://www.cnblogs.com/rainsoul/p/8430074.html
(status,result) = stitcher.stitch(slices)
if status == cv.STITCHER_OK:print("Panorama stitched successfully!")plt.imshow(result[:,:,::-1])
else:print("Panorama stitch failed! Status=" + str(status))

? ? ? ? 運行效果:

????????

? ? ? ? 如果狀態返回失敗,請參考代碼里的鏈接看看是什么問題

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/167030.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/167030.shtml
英文地址,請注明出處:http://en.pswp.cn/news/167030.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

NX二次開發UF_CSYS_map_point 函數介紹

文章作者:里海 來源網站:https://blog.csdn.net/WangPaiFeiXingYuan UF_CSYS_map_point Defined in: uf_csys.h int UF_CSYS_map_point(int input_csys, double input_point [ 3 ] , int output_csys, double output_point [ 3 ] ) overview 概述 Ma…

Android11編譯第七彈:串口文件讀寫

問題:需要對SIM卡進行管理,支持APP切換SIM卡。此功能需要訪問串口文件,并且對串口文件進行讀寫。APP操作串口文件/dev/ttyUSB1時,串口文件打開失敗。 2023-11-23 10:59:44.092 14264-14264 MULTI_CARD_SerialHandle com.wellnkio…

三分鐘快速理解 ChatGPT 背后的大模型技術

在過去的十年中,人工智能領域取得了重大突破,其中自然語言處理(NLP)是其重要子領域之一。NLP使用的模型之一是大型語言模型(LLMs)。LLMs被設計用于處理大量文本數據,采用先進的神經網絡架構&…

nodejs 文件目錄監聽 chokidar watchpack

文件監聽實現,推薦使用chokidar: chokidar 默認是基于事件監聽文件 const chokidar require("chokidar"); const folderToWatch path.join(__dirname, "lib"); const watcher chokidar.watch(folderToWatch, { ignored: /(^|[…

在Vue中使用Echarts

文章目錄 Echarts1. 介紹2. 體驗NPM 安裝 Echarts定義 Echarts 容器引入 Echarts 3. 基礎配置 Echarts 1. 介紹 常見的數據可視化庫: D3.js 目前 Web 端評價最高的 Javascript 可視化工具庫(入手難)ECharts.js 百度出品的一個開源 Javascript 數據可視化庫Highch…

鼠標拖拽問題,不選中文本不觸發單擊事件

文章目錄 1. 為什么鼠標單擊的時候觸發了mousemove事件?明明鼠標沒有移動2. 鼠標拖拽元素怎么能不觸發單擊事件?怎么處理鼠標在元素內的相對定位,而不是每次定位到左上角?方式一:拖拽的元素沒有注冊click監聽就不會觸發…

10年測試老鳥,自動化測試經驗10條建議,一路狂飆...

目錄:導讀 前言一、Python編程入門到精通二、接口自動化項目實戰三、Web自動化項目實戰四、App自動化項目實戰五、一線大廠簡歷六、測試開發DevOps體系七、常用自動化測試工具八、JMeter性能測試九、總結(尾部小驚喜) 前言 1、哪一刻&#x…

Java面試題(每天10題)-------連載(37)

目錄 Mysql篇 1、Mysql如何優化DISTINCT? 2、如何輸入字符為十六進制數字? 3、如何顯示前50行? 4、可以使用多少列創建索引? 5、NOW()和CURRENT_DATE()有什么區別? 6、什么樣的對象可以使用CREATE語句創建&…

Postman如何使用(二):Postman Collection的創建/使用/導出分享等

一、什么是Postman Collection? Postman Collection是可讓您將各個請求分組在一起。 您可以將這些請求組織到文件夾中。中文經常將collection翻譯成收藏夾。如果再下文中看到這樣的翻譯不要覺得意外。Postman Collection會使你的工作效率更上一層樓。Postman Colle…

【洛谷 B2080】計算多項式的值 題解(順序結構+四則運算)

計算多項式的值 題目描述 假定多項式的形式為 x n x ( n ? 1 ) x^nx^{(n-1)} xnx(n?1) … x 2 x 1 x^2x1 x2x1,請計算給定單精度浮點數 x x x 和正整數 n n n 值的情況下這個多項式的值。多項式的值精確到小數點后兩位,保證最終結果在 doub…

NFS 速度變慢問題排查 性能優化

NFS 使用 RPC 來進行客戶端和服務器之間的通信。而在 RPC 的底層,NFS 使用 TCP 來進行數據的可靠傳輸,以便客戶端和服務器之間能夠有效地傳輸文件和進行遠程調用(默認為TCP,也可調整為udp) 1.首先服務器端啟動RPC服務portmap&…

教師工作就業前景

在這個知識爆炸的時代,當老師無疑是社會發展的重要基石。隨著科技的進步和社會的發展,教育行業的需求也在不斷增長。那么,教師工作的就業前景如何呢? 我們來看看教師工作的市場需求。隨著國家對教育的重視和投入的增加&#xff0c…

C/C++ 實現Socket交互式服務端

在 Windows 操作系統中,原生提供了強大的網絡編程支持,允許開發者使用 Socket API 進行網絡通信,通過 Socket API,開發者可以創建、連接、發送和接收數據,實現網絡通信。本文將深入探討如何通過調用原生網絡 API 實現同…

「Java開發中文指南」IntelliJ IDEA插件安裝(一)

IntelliJ IDEA是java編程語言開發的集成環境。IntelliJ在業界被公認為最好的Java開發工具,尤其在智能代碼助手、代碼自動提示、重構、JavaEE支持、各類版本工具(git、svn等)、JUnit、CVS整合、代碼分析、 創新的GUI設計等方面的功能是非常強大的。 插件擴展了Intel…

【分布式】分布式中的時鐘

一、物理時鐘 vs 邏輯時鐘 時鐘的存在主要是為了標識事件的發生順序。 分布式系統不使用物理時鐘記錄事件,分布式系統中每個節點記錄的時間并不一樣,即使設置了 NTP 時間同步節點間也存在毫秒級別的偏差 所以需要有另外的方法記錄事件順序關系&#x…

vue2中使用echarts

1,安裝echarts npm install --save echarts 2&#xff0c;具體頁面 <template><div class"app-container"><div class"aa" id"main" style"width: 500px; height: 400px;"></div></div> </te…

PDF 批量處理軟件BatchOutput PDF mac中文版介紹

BatchOutput PDF mac是一款適用于 Mac 的 PDF 批量處理軟件。它可以幫助用戶將多個 PDF 文件進行異步處理&#xff0c;提高工作效率。 BatchOutput PDF 可以自動化執行許多任務&#xff0c;包括 PDF 文件的打印、轉換、分割、壓縮、加密、重命名等&#xff0c;而且它還可以將自…

Elasticsearch知識

目錄 Elasticsearch邏輯設計和物理設計 邏輯設計物理設計Elasticsearch原理 倒排索引文檔的分析過程保存文檔搜索文檔寫數據的底層原理 數據刷新&#xff08;fresh&#xff09;事務日志的寫入ES在大數據量下的性能優化 文件系統緩存優化數據預熱文檔&#xff08;Document&…

【數據分享】2023年我國省市縣三級的瞪羚企業數量(免費獲取/Excel/Shp格式)

企業是經濟活動的參與主體。一個城市的企業數量決定了這個城市的經濟發展水平&#xff01;比如一個城市的金融企業較多&#xff0c;那這個城市的金融產業肯定比較發達&#xff1b;一個城市的制造業企業較多&#xff0c;那這個城市的制造業肯定比較發達。 之前我們給大家分享了…

《opencv實用探索·二》根據RGB的像素排列來理解圖像深度、像素深度和位深度

通常對于RGB圖像主要分為RGB16&#xff0c;RGB24和RGB32。RGB16從高位到低位的排列為R->G->B&#xff0c;RGB24和RGB32從高位到低位的排列為B->G->R。 RGB16: 16 位為一個存儲單元&#xff08;一個像素&#xff09;&#xff0c;來存儲一個RGB像素;因為人眼對綠色比…