關於cuda和opencv混合編譯之_雙邊濾波

說起雙邊濾波,主要這個算法在cpu上太耗時了,平均下來,要100多毫秒.

怎麼辦呢,不怕,加速..

bool bilateralFilter_gpu(const cv::Mat& src,cv::Mat &dst)
{
	if (src.data == nullptr)
	{
		return false;
	}

//這裏不介紹了,日常的上傳下載.

	cv::cuda::GpuMat src_gpu, dst_gpu;
	src_gpu.upload(src);

//注意這裏,這個算子,這幾個參數如果設置不對,這個算法是會奔潰的.好在我們一般使用下面那個現成的.
	//cv::Ptr<cv::cuda::DisparityBilateralFilter> bilateralKernel =         
    // cv::cuda::createDisparityBilateralFilter(63,27,55);
	//bilateralKernel->apply(src_gpu, dst_gpu);

	//注意這裏兩個參數的取值範圍.
	float sigma_color = 10;
	float sigma_spatial = 10;
	cv::cuda::bilateralFilter(src_gpu,dst_gpu,3, sigma_color, sigma_spatial);

	if (dst_gpu.data != nullptr)
	{
		dst_gpu.download(dst);
	}
	else
	{
		qDebug() << QStringLiteral("計算失敗");
	}
	
	return true;
}

void main()
{

    //日常測試加速.
cv::Mat bilateral_result = cv::Mat::zeros(filter_src.cols, filter_src.filter_src.type());
	bilateralFilter_gpu(filter_src, bilateral_result);

}

這個經過加速,其時間 縮減到了 3ms,不過這個看你加速的圖像,如果分辨率比較高的,那時間相對長一點

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章