在c ++中,我们可以使用输入参数,并将值简单地返回给调用函数,但是opencv
函数将输出参数作为函数参数。是否有任何性能/互操作性原因?如果没有,那么做出此决定的原因是什么?
Mat img = cv::resize(someMat, ...);
cv::resize(someMat, img, ...);
答案 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
}