- 操纵系统:ubuntu22.04
- OpenCV版本:OpenCV4.9
- IDE:Visual Studio Code
- 编程语言:C++11
算法描述
cv::cuda::createBoxFilter 是 OpenCV CUDA 模块中的一个工厂函数,用于创建一个 盒式滤波器(Box Filter),它在 GPU 上对图像进行卷积操纵。这个滤波器常用于图像平滑(含糊),其原理是对图像中每个像素的邻域地域取平均值。
函数原型
- cv::Ptr<cv::cuda::Filter> cv::cuda::createBoxFilter
- (
- int srcType, // 输入图像类型
- int dstType, // 输出图像类型(通常设为 -1 表示与输入相同)
- cv::Size ksize, // 卷积核大小(例如 Size(5, 5))
- cv::Point anchor = cv::Point(-1, -1), // 锚点位置,默认为中心点
- int borderMode = cv::BORDER_DEFAULT, // 边界填充方式
- cv::Scalar borderVal = cv::Scalar::all(0) // 常量边界时的填充值
- );
复制代码 参数说明
参数名范例描述srcTypeint输入图像的数据范例,如 CV_8UC3(8位无符号三通道图像)。dstTypeint输出图像的数据范例。若为 -1,表现与输入图像相同。ksizecv::Size卷积核巨细(宽 x 高),比方 cv::Size(5, 5)。发起使用奇数尺寸以包管锚点居中。anchorcv: oint卷积核的锚点位置,默认是 (-1, -1),即中心点。borderModeint界限扩展模式,常用值:cv::BORDER_DEFAULT, cv::BORDER_CONSTANT, cv::BORDER_REPLICATE 等。borderValcv::Scalar如果 borderMode == BORDER_CONSTANT,则用该值填充界限,默认为玄色(全零)。 代码示例
- #include <iostream>
- #include <opencv2/cudaimgproc.hpp>
- #include <opencv2/opencv.hpp>
- #include <opencv2/cudafilters.hpp>
- int main()
- {
- // 读取图像
- cv::Mat h_img = cv::imread( "/media/dingxin/data/study/OpenCV/sources/images/Lenna.png", cv::IMREAD_COLOR );
- if ( h_img.empty() )
- {
- std::cerr << "Error: Image not found!" << std::endl;
- return -1;
- }
- // 将图像转换为支持的数据类型
- cv::Mat h_gray;
- if ( h_img.channels() == 3 )
- {
- cv::cvtColor( h_img, h_gray, cv::COLOR_BGR2GRAY ); // 转换为灰度图像
- }
- else if ( h_img.channels() == 4 )
- {
- std::vector< cv::Mat > channels;
- cv::split( h_img, channels );
- h_gray = channels[ 0 ]; // 使用第一个通道作为灰度图像
- }
- else
- {
- h_gray = h_img; // 如果已经是单通道,则直接使用
- }
- // 上传图像到 GPU
- cv::cuda::GpuMat d_src, d_dst;
- d_src.upload( h_gray );
- // 创建 Box Filter
- cv::Ptr< cv::cuda::Filter > boxFilter = cv::cuda::createBoxFilter( d_src.type(), // 输入图像类型
- -1, // 输出类型与输入一致
- cv::Size( 5, 5 ), // 卷积核大小
- cv::Point( -1, -1 ), // 锚点默认为中心
- cv::BORDER_DEFAULT // 默认边界处理
- );
- // 应用滤波器
- boxFilter->apply( d_src, d_dst );
- // 下载结果回 CPU
- cv::Mat h_dst;
- d_dst.download( h_dst );
- // 显示结果
- cv::imshow( "Original", h_img );
- cv::imshow( "Box Filtered", h_dst );
- cv::waitKey( 0 );
- return 0;
- }
复制代码 运行结果
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。 |