OpenCV圖像拼接(3)圖像拼接類cv::detail::MultiBandBlender

  • 操作系統:ubuntu22.04
  • OpenCV版本:OpenCV4.9
  • IDE:Visual Studio Code
  • 編程語言:C++11

算法描述

cv::detail::MultiBandBlender 是 OpenCV 中用于圖像拼接(stitching)模塊的一個類,主要用于將多張重疊的圖像無縫地融合成一張全景圖。它實現了多頻帶融合算法,通過分解圖像的頻率成分來實現平滑的過渡效果。

主要功能與概念

  • 多頻帶融合(Multi-Band Blending)
    該算法將圖像分解為多個頻率帶(使用高斯金字塔和拉普拉斯金字塔)。
    對每個頻率帶分別進行融合,然后重新組合成最終圖像。
    這種方法可以有效減少拼接區域的可見接縫,并處理亮度差異。

  • 融合流程
    準備輸入圖像及其掩碼。
    將圖像和掩碼送入融合器。
    執行融合并生成最終結果。

常用成員函數

  1. 構造函數
cv::detail::MultiBandBlender(bool try_gpu = false);
  • 參數:
    try_gpu: 如果為 true,嘗試使用 GPU 加速(如果可用)。默認值為 false。
  1. 準備函數
void prepare(cv::Rect dst_roi);
  • 用途: 初始化融合器,設置目標圖像的感興趣區域(ROI)。
  • 參數:
    dst_roi: 目標圖像中需要融合的區域。
  1. 添加圖像
void feed(const cv::Mat& img, const cv::Mat& mask, cv::Point tl);
  • 用途: 向融合器中添加圖像及其掩碼。
  • 參數:
    img: 輸入圖像。
    mask: 圖像的有效區域掩碼。
    tl: 圖像在最終全景圖中的左上角位置。
  1. 執行融合
void blend(cv::Mat& dst, cv::Mat& dst_mask);
  • 用途: 執行實際的融合操作,并輸出結果。
  • 參數:
    dst: 輸出的融合圖像。
    dst_mask: 輸出的融合掩碼。

代碼示例

#include <opencv2/opencv.hpp>
#include <opencv2/stitching/detail/blenders.hpp>int main()
{// 創建 MultiBandBlender 對象cv::Ptr< cv::detail::MultiBandBlender > blender = cv::makePtr< cv::detail::MultiBandBlender >();// 加載圖像cv::Mat img1 = cv::imread( "/media/dingxin/data/study/OpenCV/sources/images/stich1.png" );cv::Mat img2 = cv::imread( "/media/dingxin/data/study/OpenCV/sources/images/stich2.png" );if ( img1.empty() || img2.empty() ){std::cerr << "Error: Failed to load images!" << std::endl;return -1;}// 調試:單獨顯示原始圖像cv::imshow( "Image1", img1 );cv::imshow( "Image2", img2 );// 確保為三通道if ( img1.channels() != 3 ){cv::cvtColor( img1, img1, cv::COLOR_GRAY2BGR );}if ( img2.channels() != 3 ){cv::cvtColor( img2, img2, cv::COLOR_GRAY2BGR );}// 創建掩碼cv::Mat mask1 = cv::Mat::ones( img1.size(), CV_8UC1 ) * 255;cv::Mat mask2 = cv::Mat::ones( img2.size(), CV_8UC1 ) * 255;// 設置ROI(假設兩圖水平拼接)int roi_width  = img1.cols + img2.cols;int roi_height = std::max( img1.rows, img2.rows );cv::Rect roi( 0, 0, roi_width, roi_height );blender->prepare( roi );// 輸入圖像到融合器blender->feed( img1, mask1, cv::Point( 0, 0 ) );          // 左圖blender->feed( img2, mask2, cv::Point( img1.cols, 0 ) );  // 右圖// 融合cv::Mat result, result_mask;blender->blend( result, result_mask );// 處理結果if ( result.empty() ){std::cerr << "Error: Blending failed!" << std::endl;return -1;}if ( result.depth() == CV_32F ){result.convertTo( result, CV_8UC3, 255.0 );  // 轉為8位三通道}// 顯示和保存cv::imwrite( "panorama2.jpg", result );cv::Mat result_8u;result.convertTo( result_8u, CV_8U );  // 轉換為 8 位無符號整型?:ml-citation{ref="3,8" data="citationList"}cv::imshow( "全景圖", result_8u );cv::waitKey( 0 );  // 必須調用!return 0;
}

運行結果

在這里插入圖片描述
在這里插入圖片描述

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

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

相關文章

王者榮耀服務器突然崩了

就在剛剛王者榮耀服務器突然崩了 #王者榮耀崩了#的話題毫無預兆地沖上熱搜&#xff0c;許多玩家發現游戲登錄界面反復彈出異常提示&#xff0c;匹配成功后卡在加載界面&#xff0c;甚至出現對局數據丟失的情況。根據官方公告&#xff0c;目前技術團隊已在全力搶修服務器 #王者…

【JavaScript】JavaScript Promises實踐指南

【JavaScript】JavaScript Promises實踐指南 你了解JavaScript中的Promises嗎&#xff1f;這是一個很多人一開始就放棄的主題&#xff0c;但我會盡量讓它變得盡可能簡單。 1. “Promise”到底是什么&#xff1f; “Promise”是異步編程中的一個基本概念&#xff0c;特別是在J…

計算機視覺總結

以下是針對上述問題的詳細解答,并結合代碼示例進行說明: 1. 改進YOLOv5人臉檢測模塊,復雜光照場景準確率從98.2%提升至99.5% 優化具體過程: 光照補償:在數據預處理階段,采用自適應光照補償算法,對圖像進行實時增強,以減少光照變化對人臉檢測的影響。數據增強:在訓練…

ExpTimerApcRoutine函數分析之作用是ActiveTimerListHead里面移除定時器_etimer

第一部分&#xff1a; VOID ExpTimerApcRoutine ( IN PKAPC Apc, IN PKNORMAL_ROUTINE *NormalRoutine, IN PVOID *NormalContext, IN PVOID *SystemArgument1, IN PVOID *SystemArgument2 ) /* Routine Description: This function is the special …

算法分析與設計 專題三

目錄 一、實驗目的 二、實驗內容 三、問題分析與求解 四、AC源代碼、截圖 五、實驗小結 一、實驗目的 1、了解貪心算法的分析過程&#xff0c;學會用貪心算法解決一些具體的問題。 2、了解廣度優先算法和深度優先算法。 二、實驗內容 1992 當然&#xff0c;我們的收藏中…

1688商品詳情接口:深度解析與應用實踐

在電商領域&#xff0c;1688作為中國領先的B2B平臺&#xff0c;擁有海量的商品信息。對于開發者、商家和數據分析師來說&#xff0c;獲取1688商品的詳細信息是實現數據分析、競品研究、自動化管理和精準營銷的重要手段。本文將詳細介紹1688商品詳情接口的使用方法、技術細節以及…

每日算法-250328

記錄今天學習和解決的LeetCode算法題。 92. 反轉鏈表 II 題目 思路 本題要求反轉鏈表中從 left 到 right 位置的節點。我們可以采用 頭插法 的思路來反轉指定區間的鏈表。 具體來說&#xff0c;我們首先定位到 left 位置節點的前一個節點 prev。然后&#xff0c;從 left 位置…

C語言中的位域:節省內存的標志位管理技術

位域&#xff08;Bit-field&#xff09; 是 C 語言中的一種特性&#xff0c;允許在結構體&#xff08;struct&#xff09;中定義占用特定位數的成員變量。通過位域&#xff0c;可以更精細地控制內存的使用&#xff0c;尤其是在需要存儲多個布爾值或小范圍整數時&#xff0c;可以…

【AI編程學習之Python】第一天:Python的介紹

Python介紹 簡介 Python是一種解釋型、面向對象的語言。由吉多范羅蘇姆(Guido van Rossum)于1989年發明,1991年正式公布。官網:www.python.org Python單詞是"大蟒蛇”的意思。但是龜叔不是喜歡蟒蛇才起這個名字,而是正在追劇:英國電視喜劇片《蒙提派森的飛行馬戲團》(Mo…

【openstack系列】虛擬化技術

OpenStack 是一個開源的云計算管理平臺,它本身并不直接提供虛擬化技術,而是通過集成不同的虛擬化解決方案來管理和編排計算、存儲和網絡資源。OpenStack 的核心優勢在于其靈活性和可擴展性,支持多種虛擬化技術(Hypervisor),使企業可以根據需求選擇合適的底層虛擬化方案。…

保姆級教程:Vue3 + Django + MySQL 前后端聯調(PyCharm+VSCode版)

一、環境準備與驗證 這里為減少篇幅&#xff0c;默認大家都安裝好了這些軟件。不會下載安裝的&#xff0c;教程也很多&#xff0c;這里不再做贅述。話不多說&#xff0c;咱們開始&#xff1a; 1. 安裝驗證 確保已安裝以下軟件并驗證版本&#xff1a; # 驗證Node.js node -v…

Spring Data審計利器:@LastModifiedDate詳解!!!

&#x1f552; Spring Data審計利器&#xff1a;LastModifiedDate詳解&#x1f525; &#x1f31f; 簡介 在數據驅動的應用中&#xff0c;記錄數據的最后修改時間是常見需求。Spring Data的LastModifiedDate注解讓這一過程自動化成為可能&#xff01;本篇帶你掌握它的核心用法…

洛谷題單1-P1001 A+B Problem-python-流程圖重構

題目描述 輸入兩個整數 a,b&#xff0c;輸出它們的和&#xff08;∣a∣,∣b∣≤109&#xff09;。 輸入格式 兩個以空格分開的整數。 輸出格式 一個整數。 輸入輸出樣例 輸入 20 30輸出 50方式-print class Solution:staticmethoddef oi_input():"""從…

CCF CSP 第33次(2024.03)(2_相似度計算_C++)(字符串中字母大小寫轉換+哈希集合)

CCF CSP 第33次&#xff08;2024.03&#xff09;&#xff08;2_相似度計算_C&#xff09; 題目背景&#xff1a;題目描述&#xff1a;輸入格式&#xff1a;輸出格式&#xff1a;樣例1輸入&#xff1a;樣例1輸出&#xff1a;樣例1解釋&#xff1a;樣例2輸入&#xff1a;樣例2輸出…

Windows .gitignore文件不生效的情況排查

概述 今天下班在家里搗騰自己的代碼&#xff0c;在配置.gitignore文件忽略部分文件的時候&#xff0c;發現死活不生效 問題根源 經過一通分析和排查才發現&#xff0c;是.gitignore文件的編碼錯了&#xff0c;剛開始還沒注意到&#xff0c;因為是在Windows下開發&#xff0c…

Uniapp自定義TabBar組件全封裝實踐與疑難問題解決方案

前言 在當前公司小程序項目中&#xff0c;我們遇到了一個具有挑戰性的需求&#xff1a;根據不同用戶身份動態展示差異化的底部導航欄&#xff08;TabBar&#xff09; 。這種多角色場景下的UI適配需求&#xff0c;在提升用戶體驗和實現精細化運營方面具有重要意義。 在技術調研…

四川省汽車加氣站操作工備考題庫及答案分享

1.按壓力容器的設計壓力分為&#xff08; &#xff09;個壓力等級。 A. 三 B. 四 C. 五 D. 六 答案&#xff1a;B。解析&#xff1a;按壓力容器的設計壓力分為低壓、中壓、高壓、超高壓四個壓力等級。 2.緩沖罐的安裝位置在天然氣壓縮機&#xff08; &#xff09;。 A. 出口處 …

2025年- G27-Lc101-542. 01 矩陣--java版

1.題目描述 2.思路 總結&#xff1a;用廣度優先搜索&#xff0c;首先要確定0的位置&#xff0c;不為0的位置&#xff0c;我們要更新的它的值&#xff0c;只能往上下左右尋找跟它最近的0的位置。 解題思路 我們用 BFS&#xff08;廣度優先搜索&#xff09;求解&#xff0c;因為 …

CANopen基本理論

目錄 一、CANopen簡介 二、OD對象字典 2.1 OD對象字典簡介 2.2 CANopen預定義連接集 三、PDO過程數據對象 四、SDO過程數據對象 五、特殊協議 5.1 同步協議 5.2 時間戳協議 5.3 緊急報文協議 六、NMT網絡管理 6.1 NMT節點狀態 6.2 NMT節點上線報文 6.3 NMT心跳報…

【Zookeeper搭建】Zookeeper分布式集群搭建完整指南

Zookeeper分布式集群搭建 &#xff08;一&#xff09;克隆前準備工作 一、時鐘同步 步驟&#xff1a; 1、輸入date命令可以查看當前系統時間&#xff0c;可以看到此時系統時間為PDT&#xff08;部分機器或許為EST&#xff09;&#xff0c;并非中國標準時間。我們在中國地區…