今天,一个朋友想使用我的SSE优化Demo里的双线性插值算法,他已经在项目里使用了OpenCV,因此,我就建议他直接使用OpenCV,朋友的程序非常注意效率和实时性(因为是处理视频),因此希望我能测试下我的速度和OpenCV相比到底那一个更有速度优势,恰好前一段时间也有朋友有这方面的需求,因此我就随意编写了一个测试程序,如下所示:
IplImage *T = cvLoadImage("F:\\1.JPG");
IplImage *SrcImg = cvCreateImage(cvSize(T->width, T->height), IPL_DEPTH_8U, 1);
cvCvtColor(T, SrcImg, CV_BGR2GRAY);
//IplImage *SrcImg = cvLoadImage("F:\\3.jpg");
cvNamedWindow("处理前", CV_WINDOW_AUTOSIZE);
cvShowImage("处理前", SrcImg);
IplImage *DestImg = cvCreateImage(cvSize(SrcImg->width / 2, SrcImg->height / 2), SrcImg->depth, SrcImg->nChannels);
LARGE_INTEGER t1, t2, tc;
QueryPerformanceFrequency(&tc);
QueryPerformanceCounter(&t1);
for(int i=0; i<100; i++) cvResize(SrcImg, DestImg, CV_INTER_CUBIC);
QueryPerformanceCounter(&t2);
printf("Use Time:%f\n", (t2.QuadPart - t1.QuadPart) * 1000.0f / tc.QuadPart);
cvNamedWindow("处理后", CV_WINDOW_AUTOSIZE);
cvShowImage("处理后", DestImg);
cvReleaseImage(&SrcImg);
cvReleaseImage(&DestImg);
cvReleaseImage(&T);
我使用了一张3000*2000的大图进行测试,令我非常诧异的是,执行100次这个函数耗时居然只有 Use Time:82.414300 ms,每一帧都不到1ms,目标图像的大小可是1500*1000的呢,立马打开我自己的Demo,同样的环境下测试,100次耗时达到了450ms,相差太多了,要知道,我那个可是SSE优化后的啊。有点不敢相信这个事实。
接着,我把CV_INTER_LINEAR(双线性)改为CV_INTER_NN(最近临),出来的结果是Use Time:78.921600 ms,注意到没有,时间比双线性的还要多,感觉这完全不合乎逻辑啊。
稍微冷静下来,我认为这绝对不符合真理,但是我心中已经隐隐约约知道大概为什么会出现这个情况,于是,我又做了下面几个测试。
第一、换一副图像看看,我把源图像的大小改为3001*2000,测试结果为:Use Time:543.837400 ms。
把源图像的大小改为3000*2001,测试结果为:Use Time:541.567800 ms。
把源图像的大小改为3001*2001,测试结果为:Use Time:547.325600 ms。
第二:源图像还是使用3000*2000大小,把DestImg的大小修改为1501*1000,测试结果为:Use Time:552.432800 ms。
把DestImg的大小修改为1500*1001,测试结果为:Use Time:549.956400 ms。
把DestImg的大小修改为1501*1001,测试结果为:Use Time:551.371200 ms。
这两个测试表明,这种情况只在:
一、源图像的宽度和高度均为2的倍数时;
二、目标图像的宽度和高度都必须为源图像的一半时;
时方有可能出现,那么他们是充分条件了吗?接着做试验。
第三:把插值方法改为其他的方式,比如CV_INTER_CUBIC(三次立方),若其他参数都不变,测试结果为:Use Time:921.885900 ms。
同样适使用三次立方,源图大小修改为3000*2001,测试结果为:Use Time:953.748100 ms。
&nb

本文深入探讨了OpenCV中双线性插值算法的高效实现,特别是在特定条件下,如源图像尺寸为2的倍数且目标图像尺寸为源图像一半时,算法速度显著提升的原因。通过对算法本质的解析,作者展示了如何利用SSE和AVX指令进行优化,以达到与OpenCV相当甚至更优的性能。
最低0.47元/天 解锁文章
之异象解析和自我实现。...&spm=1001.2101.3001.5002&articleId=126792279&d=1&t=3&u=4221f7f203ff4a28ba26ec0fdcfedcd4)
398

被折叠的 条评论
为什么被折叠?



