此 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”,但它显示错误? [关闭]