C++ /Qt opencv如何实现windows照片命名

想要做一个批量保存图片 imwrite(string, img)的功能,
但是只能找到简单的for循环批量保存图像,


for( i=0;i<=n;i++){
imwrite(...);
}


问题是如果想做到类似window相册的功能,即imwrite不会覆盖已存在的相片,如果发现重复又会自动重新命名 save(1) save(2),应该如何实现
觉得将所有文件名读取至一个list 每次imwrite图像都遍历名称一遍似乎也不太对,一两千张下来会导致很耗时

更正:
刚刚想到一个缓存的方法,不知道是否可行,一个文件夹已存在:

001.jpg, 002.jpg

现希望新生成的直接命名为003.jpg而非覆盖方法
生成时固定名称保存图像为

 huancun_001.jpg. huancun_002.jpg

然后写一个批量重命名程序,
在程序结束后批量重命名:

001.jpg 002.jpg 003.jpg 004.jpg

好像这样就可以按照原顺序命名?


// g++ -Wall -std=c++17 main.cpp

#include <iostream>
#include <cstdio>
#include <fstream>
#include <filesystem>

int main()
{
    int n;
    std::cin >> n;
    char filename[32];
    for (int i = 1; i <= n; i++)
    {
        std::sprintf(filename, "%03d.txt", i);
        int j = 1;
        while (std::filesystem::exists(filename))
            std::sprintf(filename, "%03d-%d.txt", i, j++);
        std::ofstream file(filename);
        file << i;
    }
    return 0;
}

c++下面还是从001开始直接全部命名好做一些,从中间某个值开始你需要先读取原来文件中存在的图片名,然后分割文件名找到所有连续中断的位置,这个麻烦,还不如一遍到位直接从固定下标开始命名,也就是直接int=起始数字。
或者你能保证文件中前面已经存在的图片中没有断,全部都是连续的,那么先将图片名读取到list,判断下list长度length,从i=length下标开始命名也是可以的。
如果是python脚本的就比较简单,只要两次生成的两组图片命名都是连续的,可以将其中一组接在另外一组后面,c++也可以做,比较麻烦就是了。

在for循环iwrite前做个字符拼接str(i)+".jpg",要手动重命名就给弹出个dialog输名字在保存,要判断是否存在实际也不用遍历,io包能直接判断该文件是否已存在,存在就在名字后面加“(1)”,再判断在不在