此 cpp 代码用于使用 ls 命令加载图像。但它没有加载任何图像,即使它没有显示任何错误。请帮我解决这个问题 [关闭]

Posted

技术标签:

【中文标题】此 cpp 代码用于使用 ls 命令加载图像。但它没有加载任何图像,即使它没有显示任何错误。请帮我解决这个问题 [关闭]【英文标题】:This cpp code is for loading images using ls command.But it is not loading any image, even though it doesn't show any error.plz help me to fix this [closed] 【发布时间】:2014-01-15 11:10:11 【问题描述】:
#include<iostream>
#include<sys/types.h>
#include<unistd.h>
#include<stdio.h>
#include<stdlib.h>
#include<cv.h>
#include<highgui.h>
#include<string.h>

using namespace std;
using namespace cv;
//int count=0;
string getResult(string cmd);

int main(int argc,char *argv[])

    IplImage* img;
    int i;
    string ls=getResult("ls -A /home/arya/Images/Input");
    return 0;

string getResult(string cmd)

    IplImage* img;
    IplImage* imge;
    cvNamedWindow("result");
    string data;
    char buf[128];

    FILE *pipe=popen(cmd.c_str(),"r");
    if(!pipe)
        return "ERROR";

    while(!feof(pipe))
    
        if(fgets(buf,128,pipe)!=NULL)
            cout<<buf<<endl;
        img=cvLoadImage(buf);
        cvShowImage("result",img);
        cvWaitKey(0);
        cvReleaseImage(&img);
    
    cvReleaseImage(&img);
    cvDestroyWindow("result");
    pclose(pipe);
    return data;

【问题讨论】:

将问题写在实际的问题正文中,而不是标题中。也尝试自己先尽可能缩小代码范围。 同时正确缩进你的代码,这样更容易阅读。 【参考方案1】:

您的代码存在两个主要问题。首先是while (!feof(...)) 不会像您期望的那样工作。这是因为EOF 标志直到之后您第一次尝试读取文件末尾之后才设置。相反,例如while (fgets(...) != NULL).

第二个问题,也是问题的可能原因是fgets 不仅读取了整行,还在生成的缓冲区中保留了换行符。这意味着如果您有一行包含文件名hello.jpg,它将作为"hello.jpg\n" 存储在缓冲区中。您需要检查并从缓冲区中删除尾随空格。

【讨论】:

以上是关于此 cpp 代码用于使用 ls 命令加载图像。但它没有加载任何图像,即使它没有显示任何错误。请帮我解决这个问题 [关闭]的主要内容,如果未能解决你的问题,请参考以下文章

如何使用命令提示符 (cmd) 在 Windows 中列出文件。我尝试在 Linux 中使用“ls”,但它显示错误? [关闭]

openmvs

当我处于生产模式时,图像不会加载到离子电容器中,但它处于开发模式

去GC似乎没有收集我的未引用的图像加载指针? [关闭]

c_cpp PNG图像大小无需加载所有数据

nano使用及细读man和info里的ls命令