关于cuda和opencv混合编译之_高斯滤波

9 篇文章 0 订阅
6 篇文章 0 订阅

这里都是加速之后的一些使用方式,有一些细节上面的变化

 

//高斯滤波gpu加速.
这里介绍一下kerneltype 这个是高斯核的大小,一般为3*3 5*5 7*7 等.

bool gaussianBlur_gpu(cv::Mat &src,cv::Mat &dst,int kernelType = 5)
{

	if (src.data == nullptr)
	{
		return false;
	}


	cv::cuda::GpuMat src_gpu, dst_gpu5x5;

	src_gpu.upload(src);

    //注意这个细节 cv::ptr, 这个东西就是个智能指针,shred_ptr<> 这个东西,别被迷惑了.
	cv::Ptr<cv::cuda::Filter> filter5x5,;

    //这里的这几个参数,大家编译好之后,直接看源码的注释,或者我这里献丑了,给大家记录一下.
   
	filter5x5 = cv::cuda::createGaussianFilter(CV_8UC3, CV_8UC3,cv::Size(5,5),1);
	filter5x5->apply(src_gpu, dst_gpu5x5);
	
	dst_gpu5x5.download(dst);

	return true;
}



//这个是它的原型.
 
	/** @brief Creates a Gaussian filter.

    @param src类型源图像类型。
    @param dst类型目标数组类型。
    @param ksize孔径大小。
    @param sigma1 高斯 在水平方向。
    @param sigma2 Gaussian sigma 在垂直方向。
    \f$\texttt{sigma2}\leftarrow\texttt{sigma1}\f$ .
    @param rowBorderMode Pixel extrapolation method in the vertical direction. For         details, see
    borderInterpolate.
    @param columnBorderMode Pixel extrapolation method in the horizontal direction.

    @sa GaussianBlur
 */
	 Ptr<Filter> createGaussianFilter(int srcType, int dstType, Size ksize,
		double sigma1, double sigma2 = 0,
		int rowBorderMode = BORDER_DEFAULT, int columnBorderMode = -1);

//测试环节.
void main()
{

	cv::Mat gray_r = imread("image\\group_7.bmp");
    cv::Mat gaussiand_result=cv::Mat::zeros(h_result.cols, h_result.rows,CV_8UC3);
	gaussianBlur_gpu(gray_r,gaussiand_result); 
    imshow("gaussiand_result", gaussiand_result);
    cv::waitKey(0);

}

经过加速,原来几十毫秒的时间,瞬间之后 //0.019ms ,怎么样,够快吧

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值