wjxwjx111111 2015-07-30 02:32 采纳率: 0%
浏览 1305
已结题

求:该程序的输出为什么没有

#include "stdafx.h" //头文件预编译;
#include

#include //标准的输入输出流头文件;
#include
#include // 目录遍历 for mk_dir;
#include // 主要定义一些和缓冲区相关的读写函数 for _acess();
#include // strcpy函数需要;

int recursive_mkdir(char*dir)
{
//分解路径名E:\AA\BB\CC\
//
std::string str = dir;
int index = 0;
int i = 0;
while(1)
{
std::string::size_type pos = str.find("\",index);
std::string str1;
str1 = str.substr(0,pos);
if( pos != -1 && i > 0 )
{
if (_access(str1.c_str(),0)==-1)
{
_mkdir(str1.c_str());
}
}
if( pos==-1 )
{
break;
}
i ++;
index = pos+1;
}
return 0;
}// 实现文件夹创建的功能;

int ImageToVideo(char* outDir,char* videoName,char* inputDir,int startFrame,int endFrame,
int imgW,int imgH,char* imgExt,double fps,int isColor,int fourcc=CV_FOURCC('D','I','V','X'))
{
if(_access(inputDir,0)==-1) //(文件路径,访问权限设定); 0,只检查文件是否存在; //判断输入文件夹是否存在;
// 如果文件具有指定的访问权限,则函数返回0;如果文件不存在或者不能访问指定的权限,则返回-1;
{
std::cout<<"the input directory does not exist!"<<std::endl;
return 0;
}

char fullVideoName[255];    //输出视频的完整文件名:路径+文件名;
strcpy(fullVideoName,"E:\\NewFile\\out");    //char *strcpy(char* dest, const char *src);
                             //把从src地址开始且含有NULL结束符的字符串复制到以dest开始的地址空间;

if (outDir==NULL)
{
    sprintf(fullVideoName,"%s",videoName);   // 把格式化的数据写入某个字符串中; sprintf(buffer,"%d plus %d is %d",a,b,a+b);
}
else
{
    if (_access(outDir,0)==-1)
    {
        recursive_mkdir(outDir);
    }
    sprintf(fullVideoName,"%s%s",outDir,videoName);
}
int frameCount=0;
CvVideoWriter *pWriter=NULL;
CvSize size=cvSize(imgW,imgH);   // 矩阵框的大小;
pWriter=cvCreateVideoWriter(videoName,fourcc,fps,size,isColor);   // 创建视频写入器;

IplImage *pImg=NULL;
char cur_fn[255];   //表示某张图片的路径;
while (startFrame<=endFrame)
{
    strcpy(cur_fn,"");
    sprintf(cur_fn,"%s%d%s",inputDir,startFrame,imgExt);
    pImg=cvLoadImage(cur_fn,1);    // IplImage* cvLoadImage( const char* filename, int flags=CV_LOAD_IMAGE_COLOR );

    //std::cout<<"cur_fn="<<cur_fn<<std::endl;
    if (!pImg)
    {
        std::cout<<"can not open an image file"<<std::endl;
        return frameCount;
    }
    cvWriteFrame(pWriter,pImg);    // 写入一帧到一个视频文件中;
    cvWaitKey(1);    // 不断刷新图像,频率时间为1;
    std::cout<<"write frame"<<startFrame<<std::endl;
    startFrame++;
    cvReleaseImage(&pImg);
    frameCount++;
}
cvReleaseVideoWriter(&pWriter);
rename(videoName,fullVideoName);  //移动文件到指定文件夹; int rename(char *oldname, char *newname);
return frameCount;

}
int _tmain(int argc, _TCHAR* argv[])
{
char* inputDir="F:\727\bmp\";
char* videoName="out";
char* outDir="E:\NewFile";

int frames=ImageToVideo(outDir,videoName,inputDir,1,30,908,454,".BMP",10,1,CV_FOURCC('D','I','V','X'));

std::cout<<"total frames"<<frames<<"have been write to video."<<std::endl;
std::cout<<"video:"<<videoName<<"have been write to "<<outDir<<std::endl;
int p;
std::cin>>p;
return 0;

}

这段程序能成功运行,运行后的结果在下图。 但是,我想要得到的视频的输出文件没有。。。求大神解决

图片说明

  • 写回答

1条回答 默认 最新

  • lpfly 2015-07-31 10:02
    关注

    在tmain()里,你的路径是错的,要用两个斜杠:

    char* inputDir="F:\\727\\bmp\\";
    char* videoName="out";
    char* outDir="E:\\NewFile";
    

    另外在ImageToVideo()里,你的一个路径字符串串联是错误的,比如这个:

    sprintf(fullVideoName,"%s%s",outDir,videoName);
    

    你的目录和文件名之间少了个斜杠,应该是:

    sprintf(fullVideoName,"%s\\%s",outDir,videoName);
    

    自己再检查一下其他的路径问题。

    评论

报告相同问题?

悬赏问题

  • ¥20 sub地址DHCP问题
  • ¥15 delta降尺度计算的一些细节,有偿
  • ¥15 Arduino红外遥控代码有问题
  • ¥15 数值计算离散正交多项式
  • ¥30 数值计算均差系数编程
  • ¥15 redis-full-check比较 两个集群的数据出错
  • ¥15 Matlab编程问题
  • ¥15 训练的多模态特征融合模型准确度很低怎么办
  • ¥15 kylin启动报错log4j类冲突
  • ¥15 超声波模块测距控制点灯,灯的闪烁很不稳定,经过调试发现测的距离偏大