我是新的打开CV和C.我如何为同一种操作指定多个图像
如果你的图像是(顺序)编号,你可以滥用一个隐藏的功能与videoccapture,只需传递一个(格式)字符串:
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);
}
OpenCV没有为此提供任何功能。您可以使用第三方库从文件系统读取文件。如果您的图像是顺序编号的,您可以使用@berak技术,但如果您的文件不是顺序编号的,则可以使用boost::filesystem(重型和我最喜欢的)来读取文件。或者 direct .h(小,单头)库。
下面的代码将direct .h用于此作业
#include <iostream>
#include <opencv2opencv.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 Foldern");
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 Imagen");
continue;
}
// Add your any image filter here
fileName = outputDirectory + "\" + std::string(_dirent->d_name);
cv::imwrite(fileName.c_str(), rawImage);
}
closedir(directory);
}