這裏都是加速之後的一些使用方式,有一些細節上面的變化
//高斯濾波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 ,怎麼樣,夠快吧