【问题标题】:OpenCV Mat processing timeOpenCV Mat 处理时间
【发布时间】:2012-10-23 13:19:37
【问题描述】:

我想知道为 OpenCV 函数的 src(源)和 dst(目标)设置不同的变量是否会对处理时间产生影响。我在下面有两个功能 做同样的事情。

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

对比

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

两者哪个更好?一个比另一个有什么优势?

【问题讨论】:

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

标签: java android image-processing opencv matrix


【解决方案1】:

要确定,只需像这样将您的 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);

为了获得最佳结果,对多次调用执行此操作并平均结果。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-12-22
    • 2015-01-10
    • 2012-12-04
    • 1970-01-01
    • 2015-07-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多