我是新手,打开CV和C.如何为同一种操作指定多个图像。
答案 0 :(得分:6)
如果您的图像(按顺序)编号,您可以使用VideoCapture滥用隐藏的功能,只需将其传递给(格式)字符串:
VideoCapture cap("/my/folder/p%05d.jpg"); // would work with: "/my/folder/p00013.jpg", etc
while( cap.isOpened() )
{
Mat img;
cap.read(img);
// process(img);
}
答案 1 :(得分:0)
OpenCV不为此提供任何功能。您可以使用第三方lib从文件系统中读取文件。如果您的图像按顺序编号,您可以使用@berak技术但如果您的文件不是顺序的,那么使用可以使用 boost :: filesystem (沉重和我最喜欢的)来读取文件。或 dirent.h (仅限小型,单个标题)库。
以下代码使用dirent.h进行此作业
#include <iostream>
#include <opencv2\opencv.hpp>
#include "dirent.h"
int main(int argc, char* argv[])
{
std::string inputDirectory = "D:\\inputImages";
std::string outputDirectory = "D:\\outputImages";
DIR *directory = opendir (inputDirectory.c_str());
struct dirent *_dirent = NULL;
if(directory == NULL)
{
printf("Cannot open Input Folder\n");
return 1;
}
while((_dirent = readdir(directory)) != NULL)
{
std::string fileName = inputDirectory + "\\" +std::string(_dirent->d_name);
cv::Mat rawImage = cv::imread(fileName.c_str());
if(rawImage.data == NULL)
{
printf("Cannot Open Image\n");
continue;
}
// Add your any image filter here
fileName = outputDirectory + "\\" + std::string(_dirent->d_name);
cv::imwrite(fileName.c_str(), rawImage);
}
closedir(directory);
}