2012-10-23 8 views
5

Ich würde gerne wissen, ob verschiedene Variablen für die Quelle (Quelle) und dst (Ziel) einer OpenCV-Funktion einen Einfluss auf die Verarbeitungszeit haben wird. Ich habe zwei Funktionen unter , die das Gleiche tun.OpenCV Mat Bearbeitungszeit

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

Welcher der beiden ist besser? Was ist der Vorteil eines über dem anderen?

+0

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

+0

Soweit ich weiß, was besser ist, hängt von jeder Funktion ab. Ich denke, Sie können davon ausgehen, dass die Verwendung eines anderen dst (wenn Sie es nicht absichtlich erstellen) gleich oder besser als dst == src ist. –

+0

Zeit es/Profil es .. – volting

Antwort

3

um sicher zu wissen, Sandwich nur Ihre getY Methode integrierten Methoden zwischen OpenCV der Anrufe double getTickCount() und double getTickFrequency() wie diese (auch auf Java übersetzen müssen):

//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); 

Die besten Ergebnisse erzielen Sie dazu für mehrere Anrufe und Durchschnitt der Ergebnisse.