2 alensama alensama 于 2016.02.03 20:52 提问

opencv 保存视频文件名称更改问题

cvCreateVideoWriter( const char* filename, int fourcc, double fps, CvSize frame_size,
int is_color CV_DEFAULT(1));
这是一个保存视频文件的函数 第一个参数是文件名 每次保存的文件名称为当前时间,自己写的代码如下:
char *getSystemTime()
{
char y[20], mon[5], d[5], h[5], mins[5], *temp;
char *temp;
char str[5]=".avi";
time_t rawtime;
struct tm *timeinfo;
time(&rawtime);
timeinfo = localtime(&rawtime); // 需要给timeinfo赋值
printf("%4d-%02d-%02d-%02d:%02d:%02d\n", 1900 + timeinfo->tm_year, 1 + timeinfo->tm_mon, timeinfo->tm_mday, timeinfo->tm_hour, timeinfo->tm_min, timeinfo->tm_sec);
_itoa(1900 + timeinfo->tm_year, y, 10);
_itoa(1 + timeinfo->tm_mon, mon, 10);
_itoa(timeinfo->tm_mday, d, 10);
_itoa(timeinfo->tm_hour, h, 10);
_itoa(timeinfo->tm_min, mins, 10);
strcat(y, mon);
strcat(y, d);
strcat(y, h);
strcat(y, mins);
temp = strcat(y, str);
printf("%s\n", temp);
return temp;
}

int main(int argc, char** argv)
{
CvVideoWriter* video = NULL;
CvCapture* capture = cvCaptureFromCAM(0);
int n;
pFrame = cvQueryFrame(capture); //首先取得摄像头中的一帧
int fps = 32; //捕捉帧率

CvVideoWriter* writer = 0; //保存就加上这句
int isColol = 1;
int frameW = 640;
int frameH = 480;
video = cvCreateVideoWriter(getSystemTime(), CV_FOURCC('P', 'I', 'M', '1'), fps, cvSize(frameW, frameH), isColol);
if (video) //如果能创建CvVideoWriter对象则表明成功
{
cout << "VideoWriter has created." << endl;
}
//创建窗口
cvNamedWindow("video", 1);
if (argc == 1)
if (!(pCapture = cvCaptureFromCAM(0)))
{
MessageBox(NULL, TEXT("打开摄像头失败,请查看是否已连接摄像头"), TEXT("错误通知"), MB_OK);
return -2;
}
while (1)
{
pFrame = cvQueryFrame(capture); //从CvCapture中获得一帧
if (!pFrame)
{
cout << "Can not get frame from the capture." << endl;
break;
}
n = cvWriteFrame(video, pFrame); //判断是否写入成功,如果返回的是1,表示写入成功
cout << n << endl;
cvShowImage("video", pFrame); //显示视频内容的图片
}

别的不重要的就不写了,debug出来到 video = cvCreateVideoWriter(getSystemTime(), CV_FOURCC('P', 'I', 'M', '1'), fps, cvSize(frameW, frameH), isColol);
这句就报错了情况如下!
图片说明
图片说明
求大神帮助

3个回答

caozhy
caozhy   Ds   Rxr 2016.02.03 21:56
已采纳

假设你的文件名是类似20160203.avi

 char t[100];
SYSTEMTIME st;
GetSystemTime(&st);
sprintf(t, "%04d%2d%2d.avi",  st.wYear,  st.wMonth,  st.wDay );
video = cvCreateVideoWriter(t, CV_FOURCC('P', 'I', 'M', '1'), fps, cvSize(frameW, frameH), isColol);
caozhy
caozhy 回复alensama: 如果问题解决了,给我点一个采纳吧,谢谢啦
2 年多之前 回复
alensama
alensama 太感谢了,这个问题纠结了我好久==
2 年多之前 回复
caozhy
caozhy   Ds   Rxr 2016.02.03 21:51

cvCreateVideoWriter的第一个参数是const char* filename,文件名,你getSystemTime()得到的是时间的long,作为字符数组的指针肯定报错了。
错误信息就是告诉你,因为这个地址上没找到\0,所以字符串长度在0~255以外。

你的文件名如何正好是用时间来命名的,可以用sprintf对时间格式化。

91program
91program   Ds   Rxr 2016.02.03 21:32

先把出错函数中对 getSystemTime 的调用单独出来,然后可以分析出是 getSystemTime 还是目前出错函数的问题。

alensama
alensama 我就是希望可以实现保存文件名为当前时间,改动大一点也可以
2 年多之前 回复
alensama
alensama 我尝试过了,仅仅把video = cvCreateVideoWriter(getSystemTime(), CV_FOURCC('P', 'I', 'M', '1'), fps, cvSize(frameW, frameH), isColol);里面的getSystemTime改为“a.avi”可以运行没有问题,改成getSystemTime就报错
2 年多之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!
其他相关推荐
OPenCV获取摄像头视频并写入本地代码Demo
解决用opencv保存视频0kb的问题 吧适合初学者
OpenCV学习笔记(02) :OpenCV拍摄视频并保存
前言 本程序基于Visual Studio2013+Windows 7x64 +OpenCV3.1的环境,实现调用电脑USB摄像头,并保存视频文件到本地的功能。 程序实现 //VideoCapture.cpp #include&lt;opencv2\opencv.hpp&gt; using namespace cv; int main(){ VideoCapture capture(0); /
opencv中视频的保存(两个版本的)
在对视频进行处理时,很多需要保存处理后的结果,因而想借助于opencv将处理过后的视频保存下来。opencv中保存视频的方式分为 VideoWriter和CvVideoWriter两个版本的,其中前者是对应Mat,后者对应的是IplImage*的。现在多用的是前者,但很多较老的代码中还是用的CvVideoWriter这中方式的,本文对这两种都简要介绍一下。首先是VideoWriter,基本就是将视
opencv学习笔记2:视频的读取、修改和保存
opencv学习笔记2:视频的读取、修改和保存 opencv学习笔记2:视频的读取、修改和保存 目标 1、从摄像头捕获video 2、从文件中播放视频 3、保存视频 目标 1、读取video、显示和保存 2、从摄像头获取video并且显示 3、我们将使用cv2.functions() cv2.VedioWriter() 1、从摄像头捕获video 如...
openCV视频保存的一点小心得
今天为了将百度地图得到的地图记录保存为视频,本地保存下来。于是乎折腾了大半天opencv。其函数cvCreateVideoWriter还是有一些地方需要注意的。当然,我这里不会介绍该函数的具体细节了。 遇到的问题1: 现象是保存的avi文件大小为0KB。调试发现是cvCreateVideoWriter返回空指针。 原因及解决办法:原因是cvCreateVideoWriter的第二个参数问题,编
opencv摄像头拍摄视频并保存方法
一. 读取视频序列 OpenCV提供了一个简便易用的框架以提取视频文件和USB摄像头中的图像帧,如果只是单单想读取某个视频,你只需要创建一个cv::VideoCapture实例,然后在循环中提取每一帧。这里利用摄像头拍摄视频并保存成avi文件,代码如下: #include #include #include using namespace cv; using namespace std; in
opencv for python学习一之保存视频
python中使用opencv有不少小坑,现在打算在博客里面一一记录学习心得,与各位初学者共勉。 首先,刚开始学的时候,用的是opencv官方的python指导教程,可是我的电脑里面的opencv版本还是2.x的,结果导致摄像头始终打不开,后来发现需要更新版本,换了3.0以后一切都好起来了。可是,在学到教程中保存摄像头视频这里又出了幺蛾子,那就是关于视频的编码,教程上都是这么写的:
【拜小白opencv】19-保存视频操作——写操作
保存视频操作——写操作。此程序是将原视频中的B通道处理后保存。
Opencv读取和保存视频
//实现对视频的读入,灰度化,保存视频的功能 #include #include #include using namespace std; int main() { char *video="test.avi";//视频文件,名字可以修改 CvCapture *cap=cvCaptureFromAVI(video);//从视频文件中读取 /*CvCapture *cap=cvCaptu
视频的读取与保存opencv
#include <stdlib.h> #include <stdio.h> #include <math.h> #include "opencv2/opencv.hpp" int main(int argc, char *argv[]) { cv::VideoCapture capture("E:\\a3.mp4");//读入视频文件 //c