我有关于OpenCV的以下问题;我总觉得OpenCV的内存管理或多或少都很奇怪,因此我不太确定以下操作是否安全(不会引起任何悬空指针,内存泄漏等)。
我有一个Mat对象,在其中存储图像,我想使用OpenCV函数调整大小,调整大小。
我想使用以下功能:
resize(image,image,Size(),paramStruct.upScaleRatio,paramStruct.upScaleRatio, INTER_LANCZOS4);
我也使用源对象作为目标。在这种情况下,OpenCV究竟如何表现,它是否在调整后调整图像对象中的旧数据(很可能是临时对象)?或者我应该总是使用与源不同的新Mat对象? (如果可能,我不希望这样,因为它使代码复杂化)
答案 0 :(得分:2)
它始终会创建新的Mat对象,因为无法就地调整大小。 image
对象可以被视为image.data
的地址。当你这样做
image = temp_img
它实际上只传输开销。因此操作很少。
当temp_imp
是局部变量(如resize
中)时,它会在函数退出后被释放。