OpenCV CUDA 模块中用于在 GPU 上计算两个数组对应元素差值的绝对值函数absdiff(
- 操作系统: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]