qq_41747698 2021-12-14 15:38 采纳率: 75%
浏览 65
已结题

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

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

  • 写回答

3条回答 默认 最新

  • _GX_ 2021-12-14 16:24
    关注
    
    // 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;
    }
    
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

问题事件

  • 系统已结题 12月24日
  • 已采纳回答 12月16日
  • 修改了问题 12月14日
  • 修改了问题 12月14日
  • 展开全部

悬赏问题

  • ¥20 win11账户锁定时间设为0无法登录
  • ¥45 C#学生成绩管理系统
  • ¥15 VB.NET2022如何生成发布成exe文件
  • ¥30 matlab appdesigner私有函数嵌套整合
  • ¥15 vb6.0使用jmail接收smtp邮件并另存附件到D盘
  • ¥30 vb net 使用 sendMessage 如何输入鼠标坐标
  • ¥15 关于freesurfer使用freeview可视化的问题
  • ¥100 谁能在荣耀自带系统MagicOS版本下,隐藏手机桌面图标?
  • ¥15 求SC-LIWC词典!
  • ¥20 有关esp8266连接阿里云