为什么opencv使用输出参数,而不是仅返回输出?

时间:2019-04-12 13:33:57

标签: c++ opencv

在c ++中,我们可以使用输入参数,并将值简单地返回给调用函数,但是opencv函数将输出参数作为函数参数。是否有任何性能/互操作性原因?如果没有,那么做出此决定的原因是什么?

Mat img = cv::resize(someMat, ...);
cv::resize(someMat, img, ...);

1 个答案:

答案 0 :(得分:2)

现有的API更好,更快。它允许不每次都分配内存。 In cv::resize for dst Mat将调用cv :: Mat :: create。但是,如果dst已经具有相同的大小和类型,则它将为without new allocation

例如,我可以创建800x600的图片,对于较大的视频文件,请将每个帧的大小调整到此缓冲区中:

cv::Mat img(800, 600,...); // Initialization and memory allocation
...
for (; cap >> someMat;)
{
    cv::resize(someMat, img, ...); // No memory allocation, resizing into img
}

在这种情况下,将是N个内存分配:

cv::Mat img;
for (; cap >> someMat;)
{
    img = cv::resize(someMat, ...); // New allocation inside cv::resize and free previous value
}