马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?立即注册
×
- 操纵系统:ubuntu22.04
- OpenCV版本:OpenCV4.9
- IDE:Visual Studio Code
- 编程语言:C++11
算法形貌
cv::cuda::copyMakeBorder 是 OpenCV 的 CUDA 模块中的一个函数,用于在 GPU 上对图像或矩阵进行 边界添补(padding)。它雷同于 CPU 版本的 cv::copyMakeBorder,但运行在 GPU 上,适用于 cv::cuda::GpuMat 数据。
函数原型
- void cv::cuda::copyMakeBorder
- (
- InputArray src,
- OutputArray dst,
- int top,
- int bottom,
- int left,
- int right,
- int borderType,
- Scalar value = Scalar(),
- Stream& stream = Stream::Null()
- )
复制代码 参数
参数名类型形貌srcInputArray输入图像(可以是 cv::Mat 或 cv::cuda::GpuMat)。dstOutputArray输出图像(与输入类型同等,通常为 cv::cuda::GpuMat)。topint顶部添加的像素行数。bottomint底部添加的像素行数。leftint左侧添加的像素列数。rightint右侧添加的像素列数。borderTypeint边界类型,见下文分析。valueScalar如果边界类型为 BORDER_CONSTANT,则利用该值添补,默认为 0。streamStream&CUDA 流对象,用于异步执行。默认为 Stream::Null(),即同步执行。 功能形貌
该函数将输入图像复制到输出图像中,并在其四周添加指定大小的边框区域。这个操纵常用于:
- 卷积前的图像添补;
- 图像尺寸调整;
- 构造更大的图像画布;
- 预处理阶段满意某些算法对输入尺寸的要求
边界类型 (borderType)
支持以下几种常见的边界添补方式:
类型寄义BORDER_CONSTANT利用固定值添补边界(需提供 value 参数)BORDER_REPLICATE复制最边缘的像素值来添补边界BORDER_REFLECT对称反射添补,不包括边缘像素:例如 `1 2 3 → 3 2 1BORDER_REFLECT_101 / BORDER_DEFAULT对称反射添补,包括边缘像素:例如 `1 2 3 → 2 1 2 3BORDER_WRAP包裹添补:例如 `1 2 3 → 3 1 2 3 代码示例
- #include <opencv2/cudaarithm.hpp>
- #include <opencv2/cudaimgproc.hpp> // 必须包含 cudaimgproc 才能使用 copyMakeBorder
- #include <opencv2/opencv.hpp>
- int main()
- {
- // 创建测试图像(CPU)
- cv::Mat h_src = ( cv::Mat_< uchar >( 3, 3 ) << 1, 2, 3, 4, 5, 6, 7, 8, 9 );
- // 上传到 GPU
- cv::cuda::GpuMat d_src;
- d_src.upload( h_src );
- // 设置边界参数
- int top = 1, bottom = 1, left = 1, right = 1;
- int borderType = cv::BORDER_CONSTANT;
- cv::Scalar value( 0 ); // 填充黑色边界
- // 调用 copyMakeBorder
- cv::cuda::GpuMat d_dst;
- cv::cuda::copyMakeBorder( d_src, d_dst, top, bottom, left, right, borderType, value );
- // 下载回 CPU
- cv::Mat h_dst;
- d_dst.download( h_dst );
- std::cout << "Original:\n" << h_src << std::endl;
- std::cout << "Padded:\n" << h_dst << std::endl;
- return 0;
- }
复制代码 运行结果
- Original:
- [ 1, 2, 3;
- 4, 5, 6;
- 7, 8, 9]
- Padded:
- [ 0, 0, 0, 0, 0;
- 0, 1, 2, 3, 0;
- 0, 4, 5, 6, 0;
- 0, 7, 8, 9, 0;
- 0, 0, 0, 0, 0]
复制代码 |