Merge pull request #23940 from mshabunin:fix-cap-images

videoio: fix CAP_IMAGES with non-numbered file
This commit is contained in:
Alexander Smorkalov 2023-07-07 11:12:38 +03:00 committed by GitHub
commit cb2e831da4
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -302,23 +302,22 @@ bool CvCapture_Images::open(const std::string& _filename)
if (filename_pattern.empty()) if (filename_pattern.empty())
{ {
filename_pattern = _filename; filename_pattern = _filename;
cv::String filename = _filename.c_str(); if (!utils::fs::exists(filename_pattern))
if (!utils::fs::exists(filename))
{ {
CV_LOG_INFO(NULL, "CAP_IMAGES: File does not exist: " << filename_pattern);
close();
return false; return false;
} }
if (!haveImageReader(filename)) if (!haveImageReader(filename_pattern))
{ {
CV_LOG_INFO(NULL, "CAP_IMAGES: Stop scanning. Can't read image file: " << filename); CV_LOG_INFO(NULL, "CAP_IMAGES: File is not an image: " << filename_pattern);
close();
return false;
} }
length = 1; length = 1;
// grab frame to enable properties retrieval
bool grabRes = grabFrame();
grabbedInOpen = true;
currentframe = 0;
return grabRes;
} }
else
{
// determine the length of the sequence // determine the length of the sequence
for (length = 0; ;) for (length = 0; ;)
{ {
@ -330,12 +329,13 @@ bool CvCapture_Images::open(const std::string& _filename)
offset++; offset++;
continue; continue;
} }
CV_LOG_INFO(NULL, "CAP_IMAGES: File does not exist: " << filename);
break; break;
} }
if(!haveImageReader(filename)) if(!haveImageReader(filename))
{ {
CV_LOG_INFO(NULL, "CAP_IMAGES: Stop scanning. Can't read image file: " << filename); CV_LOG_INFO(NULL, "CAP_IMAGES: File is not an image: " << filename);
break; break;
} }
@ -349,12 +349,11 @@ bool CvCapture_Images::open(const std::string& _filename)
} }
firstframe = offset; firstframe = offset;
}
// grab frame to enable properties retrieval // grab frame to enable properties retrieval
bool grabRes = grabFrame(); bool grabRes = CvCapture_Images::grabFrame();
grabbedInOpen = true; grabbedInOpen = true;
currentframe = 0; currentframe = 0;
return grabRes; return grabRes;
} }