- 操作系統:ubuntu22.04
- OpenCV版本:OpenCV4.9
- IDE:Visual Studio Code
- 編程語言:C++11
算法描述
cv::detail::normalizeUsingWeightMap 是 OpenCV 中用于圖像拼接細節處理的一個函數。它根據權重圖對源圖像進行歸一化處理,通常用于圖像拼接或融合過程中,以確保不同圖像之間的平滑過渡。
原型
void cv::detail::normalizeUsingWeightMap
(InputArray weight,InputOutputArray src
)
參數
-
InputArray weight
類型: 輸入數組(通常是 Mat 類型)
描述: 權重圖,它定義了源圖像中每個像素的重要性或貢獻度。權重圖通常是一個單通道浮點類型的圖像 (CV_32FC1),其尺寸與 src 相同。在這個圖像中,較高的值表示對應的像素在最終合成圖像中有更高的重要性或優先級。權重圖可以通過多種方式生成,例如使用 cv::detail::createWeightMap 函數。 -
InputOutputArray src
類型: 輸入輸出數組(通常是 Mat 類型)
描述: 需要根據權重圖進行歸一化處理的源圖像。在調用此函數之前,src 應該具有特定的數據類型,即三通道16位短整型 (CV_16SC3),如錯誤信息所指出。這個圖像將根據提供的權重圖進行調整,以實現不同圖像間的平滑過渡。處理后的圖像會直接修改原 src 圖像數據。
代碼示例
#include <opencv2/opencv.hpp>
#include <opencv2/stitching/detail/blenders.hpp> // 包含正確的頭文件using namespace cv;
using namespace cv::detail;int main()
{// 加載或創建你的源圖像 src 和權重圖 weightMat src = imread( "/media/dingxin/data/study/OpenCV/sources/images/stich1.png", IMREAD_COLOR ); // 使用適當標志加載圖片if ( src.empty() ){std::cerr << "無法加載圖像,請檢查路徑!\n";return -1;}// 將 src 轉換為 CV_16SC3 類型src.convertTo( src, CV_16SC3 );// 創建一個與 src 同尺寸的單通道浮點型Mat對象作為權重圖Mat weight = Mat( src.size(), CV_32FC1 );// 初始化 weight 的具體數值應基于實際應用情況來填充// 這里為了示例,簡單地將其中心區域設置為1,其他地方為0circle( weight, Point( src.cols / 2, src.rows / 2 ), min( src.cols, src.rows ) / 4, Scalar( 1 ), -1 );try{// 對源圖像根據權重圖進行歸一化normalizeUsingWeightMap( weight, src );}catch ( const cv::Exception& ex ){std::cerr << "OpenCV Exception: " << ex.what() << std::endl;return -1;}// 顯示結果convertScaleAbs( src, src ); // 將處理后的圖像轉換回可顯示的格式imshow( "Normalized Image", src );waitKey( 0 ); // 等待按鍵以關閉窗口return 0;
}