简体   繁体   English

OpenCV-从文件夹加载最新图像

[英]OpenCV - Load newest image from folder

I want to develop a PhotoBooth and for this, I want to display the last picture I have made with OpenCV in C++ on a Raspberry Pi. 我想开发一个PhotoBooth,为此,我想在Raspberry Pi上显示我用C ++用OpenCV制作的最后一张照片。 So when a new photo is in the source folder, this photo must be loaded. 因此,当源文件夹中有新照片时,必须加载该照片。 How can I load the newest photo? 如何加载最新照片?

My code until now. 直到现在我的代码。 I load a specific image named "1.bmp", but I want to load with a non-specific name: 我加载了一个名为“ 1.bmp”的特定图像,但是我想使用一个非特定的名称加载:

int main() 
{
    Mat image;
    image = imread("1.bmp");

    namedWindow( "Display", WINDOW_AUTOSIZE );
    imshow( "Display", image ); 

    waitKey(0); 
    return 0;
}

Thanks for your answers. 感谢您的回答。

I am no C++ programmer, but this should give you a pretty good idea of how to do it: 我不是C ++程序员,但是这应该给您一个很好的想法:

#include <iostream>
#include <string>
#include <sys/types.h>
#include <sys/stat.h>
#include <dirent.h>

int main()
{
   struct dirent *drnt;
   struct stat stbuf;
   DIR *dr;

   // Open the current directory 
   dr=opendir(".");
   long long newest=0;
   std::string name;

   // Iterate through directory entries 
   while (drnt=readdir(dr)){

      // stat the entry to get its type and age
      stat(drnt->d_name,&stbuf);

      // Check files only - not directories. You may want to do a strcmp() against "BMP" or "bmp" here
      if(S_ISREG(stbuf.st_mode)){
         long long ns=stbuf.st_mtimespec.tv_sec * 1000000000 + stbuf.st_mtimespec.tv_nsec;
         std::cout << drnt->d_name << ": " << ns << std::endl;

         // Note this puppy if newer than current newest
         if(ns>newest){
            newest=ns;
            name=drnt->d_name;
         }
      }
   }
   closedir(dr);

   // Output name of newest
   std::cout << name << std::endl;
}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM