使用opencv按图片修改时间进行图片读取

直接上代码,注释很详细

#include  
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#define CV_LOAD_IMAGE_COLOR 1


// st_mtime按修改时间排序
struct img_sorted_by_modify_time {
    bool operator() (const std::string& p1, const std::string& p2) {
        struct stat attribp1;
        struct stat attribp2;  
        stat(p1.c_str(), &attribp1);
        stat(p2.c_str(), &attribp2);                       
        return attribp1.st_mtime < attribp2.st_mtime; 
    }
};


// 主函数
int main(int argc, char* argv[]) {
    //std::string input_img_path_parent = argv[1];
    // 定义排序路径
    std::string input_img_path_parent = "images";
    std::string input_img_path;
    std::vector filePaths; 
    // 使用opencv glob获取路径下文件
    cv::glob(input_img_path_parent + "/*", filePaths, false);
    // 打印排序前文件顺序
    std::cout << "排序前图片顺序" << std::endl;
    for (int i = 0; i < filePaths.size(); i++) {
        std::cout << filePaths[i] << std::endl;
    }
    // 排序方法实例化
    img_sorted_by_modify_time sort;
    // 排序
    std::sort(filePaths.begin(), filePaths.end(), sort);
    // 打印排序后顺序
    std::cout << "排序后图片顺序" << std::endl;
    for (int i = 0; i < filePaths.size(); i++) {
        std::cout << filePaths[i] << std::endl;
    }
    // 逐个显示图片
    cv::Mat img;
    cv::Mat img_gray;
    std::vector::iterator input_img_path_it;
    for (input_img_path_it = filePaths.begin(); input_img_path_it != filePaths.end(); ++input_img_path_it) {
        input_img_path = *input_img_path_it; 
        img = cv::imread(input_img_path, CV_LOAD_IMAGE_COLOR);
        cv::imshow("test", img);
        cv::waitKey(100);
    }
    return 0;
}

你可能感兴趣的:(C++,计算机视觉)