2012-10-23 40 views
5

我想知道OpenCV函数的src(source)和dst(destination)是否具有不同的变量会影响处理时间。我在 下有两个功能,它们完成相同的功能。OpenCV Mat处理时间

public static Mat getY(Mat m){ 
    Mat mMattemp = new Mat(); 
    Imgproc.cvtColor(m,mMattemp,Imgproc.COLOR_YUV420sp2RGB); 
    Imgproc.cvtColor(mMattemp,mMattemp, Imgproc.COLOR_RGB2HSV); 
    Core.inRange(mMattemp, new Scalar(20, 100, 100), new Scalar(30, 255, 255), mMattemp); 
    return mMattemp; 
} 

VERSUS

public static Mat getY(Mat m){ 
    Mat mMattemp_rgb = new Mat(); 
    Mat mMattemp_hsv = new Mat(); 
    Mat mMattemp_ir = new Mat(); 
    Imgproc.cvtColor(m,mMattemp_rgb,Imgproc.COLOR_YUV420sp2RGB); 
    Imgproc.cvtColor(mMattemp_rgb,mMattemp_hsv, Imgproc.COLOR_RGB2HSV); 
    Core.inRange(mMattemp_hsv, new Scalar(20, 100, 100), new Scalar(30, 255, 255), mMattemp_ir); 
    return mMattemp_ir; 
} 

其中两个是更好的?一个优于另一个的优点是什么?

+0

http://codereview.stackexchange.com/ – ArtemStorozhuk

+0

据我所知,哪个更好取决于每个功能。我认为你可以假设使用不同的dst(如果你没有故意创建它)将等于或者比dst == src更好。 –

+0

时间/简介它.. – volting

回答

3

要确信,只要夹心你getY方法OpenCV中的内置方法double getTickCount()double getTickFrequency()这样之间通话(需要转换到Java):

//first uniquely name the algorithms to compare (here just getY_TypeA and getY_TypeB) 
double durationA = cv::getTickCount(); 

getY_TypeA(image); // the function to be tested 

durationA = cv::getTickCount()-durationA; 
durationA /= cv::getTickFrequency(); // the elapsed time in ms 

//now call the other method 

double durationB = cv::getTickCount(); 

getY_TypeB(image); // the function to be tested 

durationB = cv::getTickCount()-durationB; 
durationB /= cv::getTickFrequency(); // the elapsed time in ms 

printf("Type A runtime: "+durationA+" Type B runtime: "+durationB); 

为了达到最佳效果多个调用做到这一点并对结果进行平均。