今天分析了OpenCV中的高斯滤波:
使用OpenCV中默认的方法对512*512的图像利用大小为5的模板进行滤波,使用时间为0.9000394ms
自己编写函数利用模板先行滤波再列滤波,使用时间为6.844166ms
OpenCV对图像滤波函数进行了优化是肯定的,但效率差别这么大,
可能还是我代码写得粗糙了,希望高手多多指点
Mat imgSrc, imgDst, imgTmp;
double t;
int imgRows, imgCols;
int i, j;
imgSrc = imread("lena_gray.jpg", 0);
imgCols = imgSrc.cols;
imgRows = imgSrc.rows;
imgSrc.copyTo(imgDst);
imgSrc.copyTo(imgTmp);
// gaussian blur
t = getTickCount();
GaussianBlur(imgSrc, imgDst, Size(5,5), 0, 0);
t = (getTickCount()-t)/getTickFrequency()*1000;
printf("OpenCV guassian blur time consuming : %f ms\n", t);
imwrite("res_opencv.jpg", imgDst);
t = getTickCount();
// row filter
for (j = 0; j < imgRows; j++)
{
for (i = 2; i < imgCols-2; i++)
{
imgTmp.at<uchar>(j, i) =
imgSrc.at<uchar>(j, i-2)*0.0625f +
imgSrc.