說起雙邊濾波,主要這個算法在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,不過這個看你加速的圖像,如果分辨率比較高的,那時間相對長一點