OpenCV Mat processing time

匿名 (未验证) 提交于 2019-12-03 08:46:08

问题:

I'd like to know whether having different variables for the src (source) and dst (destination) of an OpenCV function will have an effect on the processing time. I have two functions below that does the same thing.

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; } 

Which of the two is better? What is the advantage of one over the other?

回答1:

To know for sure, just sandwich your getY method calls between OpenCV's built-in methods double getTickCount() and double getTickFrequency() like this (will need to translate to 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); 

For best results do this for multiple calls and average the results.



易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!