【发布时间】:2014-11-03 13:46:29
【问题描述】:
我已经开始在 Visual C++ 2010 Express 中使用 OpenCV,因为它应该比 MATLAB 更快。
为了在两者之间进行公平比较,我正在运行一个程序,在该程序中将 RGB 图像转换为其灰度对应,并计算转换图像空间操作所用的时间。
使用cvtColor 命令在 C++ Release 中完成任务,平均需要大约 5 毫秒。在 MATLAB 中执行相同的操作,平均花费的时间或多或少相同(代码如下)。
我已经测试过了,两个程序都运行良好。
有人知道我是否可以提高 OpenCV 的速度吗?
C++ 代码。
#include <opencv2/highgui/highgui.hpp>
#include <iostream>
#include <opencv2/imgproc/imgproc.hpp>
#include <windows.h>
using namespace cv;
using namespace std;
double PCFreq = 0.0;
__int64 CounterStart = 0;
void StartCounter()
{
LARGE_INTEGER li;
if(!QueryPerformanceFrequency(&li))
cout << "QueryPerformanceFrequency failed!\n";
PCFreq = double(li.QuadPart)/1000.0;
QueryPerformanceCounter(&li);
CounterStart = li.QuadPart;
}
double GetCounter()
{
LARGE_INTEGER li;
QueryPerformanceCounter(&li);
return double(li.QuadPart-CounterStart)/PCFreq;
}
int main()
{
double time;
Mat im, result;
im = imread("C:/Imagens_CV/circles_rgb.jpg");
StartCounter();
cvtColor(im,result, CV_BGR2GRAY);
time = GetCounter();
cout <<"Process time: "<< time << endl;
}
MATLAB 代码
tic
img_gray = rgb2gray(img_rgb);
toc
【问题讨论】:
-
仅供参考:就时间而言,最好计算多次的平均时间。
-
是的,我已经这样做了。 5毫秒是平均时间。我在问题中添加了这些信息。
-
为什么matlab在这种情况下要慢一些?如果它提供了一个函数,它可能有一个优化的实现。慢的是在matlab中编程,做显式循环等等。
-
您正在使用的 matlab 代码最终会使用一个 Mex 文件(或类似的文件),在这种情况下,速度或多或少是相同的。您还可以与 Python 中的 OpenCV 进行比较;)
-
如果您愿意(通过编写 MEX 函数),MathWorks 可以更轻松地从 MATLAB 调用 OpenCV,您会很高兴:mathworks.com/help/vision/ug/opencv-interface.html(这是 R2014b CSVT 工具箱中的新功能) .还有优秀的mexopencv包。
标签: c++ performance matlab opencv