- 操作系統:ubuntu22.04
- OpenCV版本:OpenCV4.9
- IDE:Visual Studio Code
- 編程語言:C++11
算法描述
void cv::cuda::absdiff 是 OpenCV CUDA 模塊中的一個函數,用于在 GPU 上計算兩個數組對應元素差值的絕對值。
該函數會逐元素計算兩個輸入矩陣 src1 和 src2 的差值,并取其絕對值,結果保存在輸出矩陣 dst 中。
適用于圖像比較、差異檢測、視頻運動分析等場景。
函數原型
void cv::cuda::absdiff
(InputArray src1,InputArray src2,OutputArray dst,Stream & stream = Stream::Null()
)
參數
參數 | 類型 | 描述 |
---|---|---|
src1 | InputArray | 第一個輸入矩陣,支持多種數據類型(如 CV_8U, CV_32F 等) |
src2 | InputArray | 第二個輸入矩陣,必須與 src1 尺寸和類型相同 |
dst | OutputArray | 輸出結果矩陣,尺寸與輸入相同,類型通常為 CV_32F 或匹配輸入 |
stream | Stream& | 可選參數,指定 CUDA 流以實現異步執行,默認是同步執行 |
代碼示例
#include <opencv2/opencv.hpp>
#include <opencv2/cudaarithm.hpp> // 正確包含 CUDA 算術運算模塊int main() {// 創建兩個 CPU 矩陣并初始化cv::Mat h_src1 = (cv::Mat_<uchar>(2, 2) << 100, 150, 200, 250);cv::Mat h_src2 = (cv::Mat_<uchar>(2, 2) << 90, 160, 190, 255);// 上傳到 GPUcv::cuda::GpuMat d_src1, d_src2;d_src1.upload(h_src1);d_src2.upload(h_src2);// 創建輸出 GPU 矩陣cv::cuda::GpuMat d_dst;// 調用 absdiff 函數cv::cuda::absdiff(d_src1, d_src2, d_dst);// 下載回 CPU 并顯示cv::Mat h_dst;d_dst.download(h_dst);std::cout << "absdiff 結果:\n" << h_dst << std::endl;return 0;
}
運行結果
absdiff 結果:
[ 10, 10;10, 5]