Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/131.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
为什么opencv使用输出参数,而不仅仅返回输出? C++中,我们可以输入参数,简单地将值返回给调用函数,但是 opencv 函数将输出参数作为函数参数。是否存在性能/互操作性方面的原因?若否,原因为何? Mat img = cv::resize(someMat, ...); cv::resize(someMat, img, ...);_C++_Opencv - Fatal编程技术网

为什么opencv使用输出参数,而不仅仅返回输出? C++中,我们可以输入参数,简单地将值返回给调用函数,但是 opencv 函数将输出参数作为函数参数。是否存在性能/互操作性方面的原因?若否,原因为何? Mat img = cv::resize(someMat, ...); cv::resize(someMat, img, ...);

为什么opencv使用输出参数,而不仅仅返回输出? C++中,我们可以输入参数,简单地将值返回给调用函数,但是 opencv 函数将输出参数作为函数参数。是否存在性能/互操作性方面的原因?若否,原因为何? Mat img = cv::resize(someMat, ...); cv::resize(someMat, img, ...);,c++,opencv,C++,Opencv,现有的API更好更快。它不允许每次都分配内存。对于dst,Mat将调用cv::Mat::create。但如果dst已经具有相同的大小和类型,那么它将是 例如,我可以创建图像800x600,对于大视频文件,请将每个帧的大小调整到此缓冲区: cv::Mat img(800, 600,...); // Initialization and memory allocation ... for (; cap >> someMat;) { cv::resize(someMat, img,

现有的API更好更快。它不允许每次都分配内存。对于dst,Mat将调用cv::Mat::create。但如果dst已经具有相同的大小和类型,那么它将是

例如,我可以创建图像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
}

现有的API更好更快。它不允许每次都分配内存。对于dst,Mat将调用cv::Mat::create。但如果dst已经具有相同的大小和类型,那么它将是

例如,我可以创建图像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
}

可能重复:(modulo这不是opencv,但只有opencv的实现者才能知道他们为什么这么做)可能重复移动前语义,通过引用传递更有效,现在不是这样了。另外,如果他们都有C和C++库来保持最新的,那么他们在两个地方通过参数可能比较容易,所以API看起来几乎相同。谢谢提供参考,但是我已经经历过了。它只解决了效率方面的问题。我还对一些与设计相关的原因感兴趣。可能的重复:(模这不是opencv,但只有opencv的实现者才能知道为什么他们会这样做)可能的移动前语义的重复,通过引用传递更有效,现在不是这样了。另外,如果他们都有C和C++库来保持最新的,那么他们在两个地方通过参数可能比较容易,所以API看起来几乎相同。谢谢提供参考,但是我已经经历过了。它只解决了效率方面的问题。我还对一些与设计相关的原因感兴趣。为了说明这一点,我稍微改变了这个问题。不,正确。我添加了cv::resize和cv::Mat::create实现的链接。第一种情况允许重用内存。第二个-no:in-cv::resize将创建新的cv::Mat dst.Thankx,这是一个很好的答案!!使用此约定是否有任何互操作性原因?我在某个地方读到,我们可以在opencv函数中传递多种类型的容器,如vector或Mat,因为这些函数只是将接口(例如InputArray)作为输入。对于std::vector,将有相同的行为:如果size()==newSize,则vector.resize()将返回而不重新分配。否,正确。我添加了cv::resize和cv::Mat::create实现的链接。第一种情况允许重用内存。第二个-no:in-cv::resize将创建新的cv::Mat dst.Thankx,这是一个很好的答案!!使用此约定是否有任何互操作性原因?我在某个地方读到,我们可以在opencv函数中传递多种类型的容器,如vector或Mat,因为这些函数只是将接口(例如InputArray)作为输入。对于std::vector,将采用相同的行为:如果size()==newSize,则vector.resize()将返回而不重新分配。