c – OpenCV和MATLAB速度比较

我已经开始在Visual C 2010 Express中使用OpenCV,因为它应该比MATLAB更快.

为了在两者之间做一个公平的比较,我正在运行一个程序,我将RGB图像转换为其灰度对应,我计算转换图像空间操作经过的时间.

使用cvtColor命令在C版本中执行任务,平均需要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

最佳答案 如果在编译时可用,OpenCV中的颜色转换将广泛使用
Intel IPP.请参阅
modules\imgproc\src\color.cpp.
More info from Intel.请注意,此代码没有OpenMP pragma或TBB代码,因此在此处没有帮助.

令人兴奋的是,英特尔已授予OpenCV免费使用IPP子集的权利,包括这些功能.有关详细信息,请参阅release summary中的第三项.但是你至少需要使用OpenCV 3.0来获得这个免费的功能;否则你需要使用自己的IPP副本进行编译.

显然,cvtColor(最左边)没有太大的好处,但它有点提升.其他功能做得更好.

点赞