我已经开始在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(最左边)没有太大的好处,但它有点提升.其他功能做得更好.