gpt4 book ai didi

c++ - 在 C++ OpenCV 中使用相同的变量作为输入和输出是否安全?

转载 作者:塔克拉玛干 更新时间:2023-11-02 20:23:25 26 4
gpt4 key购买 nike

很多OpenCV函数定义为

function(InputArray src, OutputArray dst, otherargs..)

所以如果我想处理并覆盖同一张图片,我可以这样做吗:

function(myImg, myImg);

这样做安全吗?

谢谢

编辑:

我在询问 OpenCV 中的标准函数,如 thresholdblur 等。所以我认为它们应该相应地实现,对吗?

最佳答案

是的,在 OpenCV 中它是安全的。


在内部,一个函数如下:

void somefunction(InputArray _src, OutputArray _dst);

会做类似的事情:

Mat src = _src.getMat();
_dst.create( src.size(), src.type() );
Mat dst = _dst.getMat();

// dst filled with values

所以,如果 srcdst 是:

  • 相同 图像,创建 实际上不会执行任何操作,并且修改实际上是就地。如果操作不能就地进行(例如 OpenCV > 3.2 中的 findConturs),某些函数可能会在内部克隆 src 图像以保证正确的行为.
  • 不同图像,create会在不修改src的情况下创建一个新矩阵dst

文档说明了此默认行为不适用的地方。

一个值得注意的例子是 findContours,它修改了 src 矩阵。您通常会在输入中传递 src.clone() 来应对这种情况,这样只有克隆的矩阵会被修改,而您克隆的矩阵不会被修改。

从 OpenCV 3.2 开始,findContours 不会修改输入图像。


感谢 Fernando Bertoldi查看答案

关于c++ - 在 C++ OpenCV 中使用相同的变量作为输入和输出是否安全?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49304138/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com