OpenCV:使用相同的Mat对象作为源和目标安全吗?

时间:2017-02-23 16:45:08

标签: c++ opencv image-processing

我有关于OpenCV的以下问题;我总觉得OpenCV的内存管理或多或少都很奇怪,因此我不太确定以下操作是否安全(不会引起任何悬空指针,内存泄漏等)。

我有一个Mat对象,在其中存储图像,我想使用OpenCV函数调整大小,调整大小。

我想使用以下功能:

resize(image,image,Size(),paramStruct.upScaleRatio,paramStruct.upScaleRatio, INTER_LANCZOS4);

我也使用源对象作为目标。在这种情况下,OpenCV究竟如何表现,它是否在调整后调整图像对象中的旧数据(很可能是临时对象)?或者我应该总是使用与源不同的新Mat对象? (如果可能,我不希望这样,因为它使代码复杂化)

1 个答案:

答案 0 :(得分:2)

它始终会创建新的Mat对象,因为无法就地调整大小。 image对象可以被视为image.data的地址。当你这样做

image = temp_img 

它实际上只传输开销。因此操作很少。

temp_imp是局部变量(如resize中)时,它会在函数退出后被释放。