Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/133.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/csharp-4.0/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 如何在阵列中读取和写入图像?_C++_Arrays_Opencv - Fatal编程技术网

C++ 如何在阵列中读取和写入图像?

C++ 如何在阵列中读取和写入图像?,c++,arrays,opencv,C++,Arrays,Opencv,我遇到了一个问题:如何将数组中名为name[j]的随机图像读写到另一个文件夹中。目前,我只能将整个输入目录中的图像读写到另一个目录,而不是基于数组名[j]的随机图像。我不知道如何将数组中的值传递给imwrite()函数 这是我的完整代码: int main(int argc, char* argv[]) { string homedir = "C:\\Users\\x\\Documents\\Aggressive\\offline workspace\\abc";

我遇到了一个问题:如何将数组中名为name[j]的随机图像读写到另一个文件夹中。目前,我只能将整个输入目录中的图像读写到另一个目录,而不是基于数组名[j]的随机图像。我不知道如何将数组中的值传递给imwrite()函数

这是我的完整代码:

    int main(int argc, char* argv[])
    {
    string homedir = "C:\\Users\\x\\Documents\\Aggressive\\offline workspace\\abc";
    cerr << endl << "path =  " << homedir.c_str() << endl;

    std::string inputDirectory = "C:\\Users\\x\\Documents\\Aggressive\\offline workspace\\abc";
    std::string outputDirectory = "C:\\Users\\x\\Documents\\folder";
    DIR* directory = opendir(inputDirectory.c_str());
    struct dirent* _dirent = NULL;
    int i = 0;
    int total;
    srand(time(0)); //seed random number

    vector<string> name;

    if (directory == NULL)
    {
        printf("Cannot open Input Folder\n");
        return 1;
    }
    while ((_dirent = readdir(directory)) != NULL)
    {
        puts(_dirent->d_name); 
        name.push_back(_dirent->d_name); 
        printf("\n");
        i++;

        std::string fileName = inputDirectory + "\\" + std::string(_dirent->d_name);
        cv::Mat rawImage = cv::imread(fileName.c_str());
        if (rawImage.data == NULL)
        {
            printf("copied\n");
            continue;
        }
        // Add your any image filter here
        fileName = outputDirectory + "\\" + std::string(_dirent->d_name);
        cv::imwrite(fileName.c_str(), rawImage);


    }
    //name.erase(name.begin(), name.begin() + 1); 

    name.erase(name.begin(), name.begin() + 2);
    cout << "file name: " << name[16];
    total = i - 2;

    cout << "\n";
    cout << "There's " << total << " files in the current directory.\n" << endl;

    cout << "Enter array size: \n";
    int a;
    cin >> a;


    for (int j = 0; j < a; j++) {
         //generate random filename
         int index = rand() % a;
         //cout << filename[index] << endl;

         //swap random[j] with random[index]
         string temp = name[j];
         name[j] = name[index];
         name[index] = temp;
     }

     //loop through array and print value
     for (int j = 0; j < a; j++) {
         cout << "Random image selected:" << name[j] << endl; 
     }

    closedir(directory);
}
intmain(intargc,char*argv[])
{
string homedir=“C:\\Users\\x\\Documents\\Aggressive\\offline workspace\\abc”;
cerr d_名称);
cv::imwrite(fileName.c_str(),rawImage);
}
//name.erase(name.begin(),name.begin()+1);
name.erase(name.begin(),name.begin()+2);

cout假设
name[j]
是一个格式为
C:\\…\\img.jpg
的字符串,您可以在每个循环周期中读取这些图像并将其写入所需目录

   for (int j = 0; j < a; j++) {
         cout << "Random image selected:" << name[j] << endl; 
         // name[j] should be in the directory format like "C:\\...\\img.jpg"
         //Then read this image
         Mat img = imread(name[j]);

         //Then write to desired directory in every loop you need to change the name to avoid writing on the same name.
         string written_directory = "C:\\Users\\x\\Documents\\folder\\img" + std::to_string(j) + ".jpg";
         imwrite(written_directory,img);                  
     }
for(int j=0;j你想把所选的随机图像写到某个地方吗?如果被解释为随机图像的
name[j]
有格式字符串,比如
C:\\…\image.jpg
你可以很容易地做到。你想把它写到另一个目录吗?是的。我想把随机图像写到name[j]到另一个目录C:\\Users\\x\\Documents\\folder。请帮助我。然后用imread读取name[j]并用imwrite写入?是的。因为随机图像存储在name[j]中,所以我想读取这些图像并将其写入C:\\Users\\x\\Documents\\folder。但我不知道如何操作您可以简单地执行:
Mat img=imread(name[j])
然后写:
imwrite(“C:\\Users\\x\\Documents\\folder\\img.jpg”,img)
如果我的图像另存为2.jpg,则意味着我只需要将字符串写入\u directory=“C:\\Users\\x\\Documents\\folder\\”+std::to_string(j)+“.jpg”?但现在我有一个错误OpenCV(3.4.10)错误:断言失败(!\u img.empty())在cv::imwrite文件C:\build\3\u 4\u winpack-build-win64-vc14\opencv\modules\imgcodecs\src\loadsave.cpp第759行中,可能有2个原因:1是写入目录不存在。2是您的映像(名称[j]不存在我试图在C:\\Users\\x\\Documents\\Aggressive\\offline workspace\\abc中读取整个文件,并将其写入C:\\Users\\x\\Documents\\folder中,但成功了。这意味着我的路径是正确的。当我读取随机文件名时,我已经检查了该文件是否存在于文件夹abc中。现在我不知道具体的路径是什么问题。顺便说一句,谢谢你的帮助。:)我想根据文件名的原始名称编写文件名,怎么样?例如,在名称[j]中有一个文件2.jpg,然后当我根据建议的代码编写时,它会将我的图像保存为img0。然后你需要在循环中使用namej字符串,并获取字符串的最后一部分,该部分包含原始名称,然后将其添加到编写的目录字符串中