Og Namdik
Og Namdik

Reputation: 823

OpenCV Mat processing time

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?

Upvotes: 5

Views: 2944

Answers (1)

tkefauver
tkefauver

Reputation: 518

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.

Upvotes: 3

Related Questions