• c++批量读取图片并处理


    #include   
    #include  
    using namespace std;
    void main()
    {
    	string path = "C:/Visual Studio 2019/Projects/VOC2007_makevideo/000001.txt";
    	
    	//1.获取不带路径的文件名
    	string::size_type iPos = path.find_last_of('/') + 1;
    	string filename = path.substr(iPos, path.length() - iPos);
    	cout << filename << endl;
     
    	//2.获取不带后缀的文件名
    	string name = filename.substr(0, filename.rfind("."));
    	cout << name << endl;
     
    	//3.获取后缀名
    	string suffix_str = filename.substr(filename.find_last_of('.') + 1);//获取('.')后面的位置到结尾的字符串
    	cout << suffix_str << endl;
    }

    1. s.substr(0,5):获得字符串s中从第0位开始,长度为5的字符串;默认时的长度为从开始位置到尾。

    2. find_first_of(): 在字符串中查找第一个出现的字符c;

        int find_first_of(char c, int start = 0)
        查找字符串中第1个出现的c,由位置start开始。
        如果有匹配,则返回匹配位置;否则,返回-1.

        默认情况下,start为0,函数搜索整个字符串。

    3. find_last_of():在字符串中查找最后一个出现的字符c;
        int find_last_of(char c):
        查找字符串中最后一个出现的c。有匹配,则返回匹配位置;否则返回-1.
        该搜索在字符末尾查找匹配,所以没有提供起始位置。

    4. find()正向查找,rfind()反向查找

    一、批量读取文件夹下的图片和txt文档并处理

    #include
    #include <sstream>

    #include
    #include
    #include "ImageProcess.h"
    #include
    #include<opencv2/opencv.hpp>
    #include

    void main()
    {
        std::string imgdir = "C:\\Visual Studio 2019\\Projects\\VOC2007";
        //创建一个String类型 名字为image_files的vector
        string pattern_img = imgdir + "\\img\\*.jpg";
        vector image_files;
        cv::glob(pattern_img, image_files);//把pattern_img路径下所有文件名存在image_files中
        
        for (int i = 0; i < image_files.size(); ++i) {
            
            string::size_type iPos = image_files[i].find_last_of('\\') + 1;
            string filename = image_files[i].substr(iPos, image_files[i].length() - iPos);
            std::cout << filename << std::endl;

            //2.获取不带后缀的文件名
            string name = filename.substr(0, filename.rfind("."));
            std::cout << "无后缀:"<< name << std::endl;
            cv::Mat img = cv::imread(image_files[i]);//000053_testimg.png
            
            vector> data;
            txt_to_vectordouble(data, imgdir + "\\labels\\" + name + ".txt");
            std::cout << "txtdir: " << imgdir + "\\labels\\" + name + ".txt" << std::endl;
            CImgProcess w;
            w.ImgProcess_second(img, data);
            string write_name = imgdir + "\\results\\" + name + ".jpg";
            std::cout <<"write_name: " << write_name << std::endl;
            cv::imwrite(write_name, img);
        }

    二、批量保存图片

        int k = 1;
        char writename[40];
        sprintf(writename, "%s%d%s", "./data/output/qr", k, ".jpg");//sprintf将数据格式化写入字符串writename中
        imwrite(writename, colorImage);

    三、将文件夹的图片合成视频

    /*************************将保存的图片合成为视频**********************************/
        string pattern_img = imgdir + "\\results\\*.jpg";
        vector image_files;
        cv::glob(pattern_img, image_files);//把pattern_img路径下所有文件名存在image_files中
        
        int isColor = 1;
        //每秒钟的帧率,即一秒放多少帧图片  
        int fps = 2;
        //获取图片的宽和高  
        int frameWidth = 640;
        int frameHeight = 480;
        //声明VideoWriter类,写入视频  
        cv::VideoWriter writer;

    /*cv::VideoWriter::fourcc('M', 'P', '4', 'V')生成MP4格式视频*/

    /*cv::VideoWriter::fourcc('M', 'J', 'P', 'G')生成avi格式视频,大小比'X', 'V', 'I', 'D'大*/ /*cv::VideoWriter::fourcc('X', 'V', 'I', 'D')生成avi格式视频*/
        writer.open("D:\\test.mp4", writer.fourcc('m', 'p', '4', 'v'), fps, cv::Size(frameWidth, frameHeight));

        for (int i = 0; i < image_files.size(); ++i) {
            cv::Mat img = cv::imread(image_files[i]);//000053_testimg.png
            if (img.empty())
            {
                break;
            }
            //cv::imshow("src", img);
            //cv::waitKey(30);
            //调用writer类,传入图片  
            writer.write(img);
        }
        
     

  • 相关阅读:
    基于.NetCore开发博客项目 StarBlog - (20) 图片显示优化
    浅讲make/makefile【linux】
    Avalonia 中的样式和控件主题
    birt 如何实现 SQL 语句中带 in 的查询
    Element UI搭建使用过程
    在 Mac OS 上使用 Homebrew 打造便捷的软件安装体验:apt-get install 就是brew install:
    毕业半年多了,回顾从大学到现在搞过的很有意思的开源项目
    自费访学|金融公司高管赴世界名校伯克利交流
    Ansible Tower对接ldap和git仓库
    Netty入门案例 与 Netty异步模型
  • 原文地址:https://blog.csdn.net/water_93/article/details/126477595