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. 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:
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:
#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;
}