我正在使用boost::filesystem
和自定义递归算法来遍历目录中的图像文件。该算法将相邻图像内容读取为两个cv::Mat
,将它们一起添加,将它们写入临时文件,然后根据需要递归地继续所有临时文件,直到生成一个唯一图像。客户端代码如下所示:
auto result = my_recursive_algorithm(boost::filesystem::directory_iterator{path_to_folder},
boost::filesystem::directory_iterator{}, [](auto file_a, auto file_b){
cv::Mat image_a{cv::imread(file_a.path().string())};
cv::Mat image_b{cv::imread(file_b.path().string())};
cv::Mat sum {};
cv::addWeighted(image_a,0.5,image_b,0.5, 0, sum);
// generate a unique new_path
cv::imwrite(new_path, sum);
return new_path;
});
我采用这种方法,因为我无法保证程序必须处理的图像数量。可能是因为它们太多而无法记忆。然而,如果这是一种安全的方法,我会徘徊。当lambda返回时会发生什么?由于我只返回new_path
,我希望在每个单独的lambda调用完成时调用所有其他局部变量(cv::Mat
)的所有析构函数,对吧?或者可能只有在整个递归调用完成后才会调用它们?在后一种情况下,我的方法相当于首先将所有内容加载到内存中。