opencv存储视频
⑴ openCV采集摄像头图片并保存的方法
现在在vc上采集视频常用的方法有三:vfw,directshow,opencv
你是要进行图像处理的话推荐opencv(具体参考:于仕琪,opencv教程基础篇中的例3-6,稍作修改,估计就能用于你的工程)
下面贴出我自己编的一个小工程:如有疑问,E-mail:[email protected]
进行opencv的预备操作你要看那本书和逛opencv中文网
如有问题可以和我讨论(我也是菜鸟,刚为解决了这个问题窃喜不已)。
1.新建mfc对话框工程,在其中添加一个picture控件,除了ID以外什么都不用改
2.在对话框头文件(没有Dlg那个)中添加(最好是在“#include "resource.h" // main symbols之后”):
#include "cxcore.h"
#include "cvcam.h"
#include "windows.h"
#include "cv.h"
#include "highgui.h"
3.在工程-》设置-》选择所有配置-》link(连接)-》对象/库模块-》中添加:
kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib cxcore.lib cv.lib ml.lib cvaux.lib highgui.lib cvcam.lib
4.在需要触发摄像头显示的地方添加:
void CVideomfcDlg::OnButton1()
{
// TODO: Add your control notification handler code here
int ncams = cvcamGetCamerasCount( );//返回可以访问的摄像头数目
HWND MyWin=::GetDlgItem(m_hWnd,IDC_VIDEO); //获得控件句柄(IDC_VIDEO就是图片控件)
cvcamSetProperty(0, CVCAM_PROP_ENABLE, CVCAMTRUE); //选择第一个摄像头
int width=240;
int height=240;
cvcamSetProperty(0,CVCAM_PROP_WINDOW, &MyWin); // Selects a window for
cvcamSetProperty(0,CVCAM_RNDWIDTH, &width);
cvcamSetProperty(0,CVCAM_RNDHEIGHT, &height);
cvcamSetProperty(0, CVCAM_PROP_CALLBACK, callback1);
//回调函数将处理每一帧
cvcamInit( );
cvcamStart( );
}
5.改变显示的图像序列大小,在窗口属性设定了以后,添加如下代码:
int width=320; //这个就是需要显示的窗口大小
int height=240; //根据自己需要选择
cvcamSetProperty(0,CVCAM_RNDWIDTH, &width);
cvcamSetProperty(0,CVCAM_RNDHEIGHT, &height);
6.在对话框类中添加callback成员函数(注意,在添加函数的时候,一定要选择static,不选的话你就自己郁闷去吧,反正我是为了这个郁闷了2个礼拜)
void CVideomfcDlg::callback1(IplImage *image)
{
IplImage* image1 = image;
int i,j;
assert (image);
//获取当前系统时间
SYSTEMTIME st2=;
GetLocalTime(&st2);
char sss[18]=; //这个是用来存储所要保存的图片名的,用的是一个笨办法,先定义,再修改其中的数组值。
sss[7]=st2.wHour/10+48; //获取系统当前小时
sss[8]=st2.wHour%10+48;
sss[9]=st2.wMinute/10+48; //获取系统当前分钟
sss[10]=st2.wMinute%10+48;
sss[11]=st2.wSecond/10+48; //获取系统当前秒
sss[12]=st2.wSecond%10+48;
cvSaveImage(sss,image1); //使用系统当前时间为名称(XXXXXX.jpg)存储图片
}
ps:你还需要在c盘根目录下建立一个叫1的文件夹保存图片。
祝你成功!
⑵ 怎么用opencv调用笔记本摄像头录像并保存下来啊 求高手赐教
int main()
{
CvCapture* capture=cvCaptureFromCAM(0);//读取摄像头
if(capture==NULL)
{
printf("没有检测到摄像头");
return 0;
}
cvNamedWindow("video",1);
for (;;)
{
IplImage* frame=cvQueryFrame(capture);
if(!frame)
break;
cvShowImage("video",frame);
if(cvWaitKey(100)>=0)
break;
}
cvReleaseCapture(&capture);
cvDestroyWindow("video");
return 0;
}
大概就这样了,思路很简单,调用opencv的函数cvCaptureFromCAM()得到视频,然后再一帧一帧的获取图像,再显示出来,其实和普通的图像读入,没什么很大的区别。
⑶ opencv怎么写视频文件
#include<cv.h>#include<highgui.h>intmain(intargc,char**argv)
{
CvCapture*capture=NULL;
capture=cvCreateFileCapture("红动中国设计网视频素材2185.avi");if(!capture)return-1;//获取视频的第一帧并存在bgr_frame
IplImage*bgr_frame=cvQueryFrame(capture);//获得视频的总帧数CV_CAP_PROP_FPS帧率
doublefps=cvGetCaptureProperty(capture,CV_CAP_PROP_FPS);
//获得原始视频的高度和宽度
CvSizesize=cvSize((int)cvGetCaptureProperty(capture,CV_CAP_PROP_FRAME_WIDTH),
(int)cvGetCaptureProperty(capture,CV_CAP_PROP_FRAME_HEIGHT));///创建一个视频文件参数分别表示新建视频的名称视频压缩的编码格式新建视频的帧率新建视频的图像大小
CvVideoWriter*writer=cvCreateVideoWriter("1ai.avi",CV_FOURCC('M','J','P','G'),fps,size);//创建首地址并分配存储空间
IplImage*logpolar_frame=cvCreateImage(size,IPL_DEPTH_8U,3);//获取视频的下一帧
while((bgr_frame=cvQueryFrame(capture))!=NULL)
{//将视频从笛卡尔坐标系转到极坐标系参数分别表示输入图像输出图像变换中心尺度参数填充输出图像所有参数+CV_INTER_LINEAR表示双线性参值(具体什么意思)
cvLogPolar(bgr_frame,logpolar_frame,cvPoint2D32f(bgr_frame->width/2,bgr_frame->height/2),80,CV_INTER_LINEAR+CV_WARP_FILL_OUTLIERS);//将获取到的每一帧从笛卡尔坐标系转到极坐标系后的参数存到新建的视频文件cvWriteFrame(writer,logpolar_frame);//将获取的视频通过mainwin窗口进行展示
cvShowImage("mainwin",logpolar_frame);charc=cvWaitKey(33);//ESC默认退出
if(c==27)break;
}//释放程序中申请的空间
cvReleaseVideoWriter(&writer);
cvReleaseImage(&logpolar_frame);
cvReleaseCapture(&capture);return(0);
}
⑷ OPenCV保存非压缩(全帧)AVI 文件。如何保存非压缩AVI文件
我也在学opencv呢,在学习第二个小程序吧。。。
我也遇到一样的问题,你是不是也是播放avi时弹出窗口(仅显示第一帧)后立刻退出?
以下三个都是从网上搜到的原因
1 解码器原因
2 avi(数码相机拍的)里面包含了声音
3 好像之前比较早版本的opencv不支持清晰度大于300左右成200左右的视频
⑸ 如何opencv读取摄像头并保存每一帧图像
#include<highgui.h>
#include<windows.h>
#include<stdio.h>
int main ()
{
CvCapture *capture=cvCreateCameraCapture(0);
cvNamedWindow("camera",CV_WINDOW_AUTOSIZE);
IplImage *image;
char file_name[15];
int i;
while(1)
{
for(i=0;i<99999;i++)
{
image=cvQueryFrame(capture);
if(!image)
break;
cvShowImage("camera",image);
char c=cvWaitKey(20);
if(c==27)
{
cvReleaseCapture(&capture);
cvDestroyWindow("hh");
exit(0);
}//按esc退出
sprintf(file_name,"d:\\%05d.jpg",i);//d盘根目录下生成
cvSaveImage(file_name,image);
}
Message(NULL,"文件名超出范围!","警告!",MB_OK);
}
}
供参考。
⑹ 如何把opencv读取的摄像头视频保存到指定文件夹下
不用工具的话
先用ie打开视频
点击工具
选项
设置查看临时文件存放位置
然后等视频加载完之后搜索这个文件夹
按大小排序
一般比较大的文件就是了
必要时要改扩展名
不然用软件工具
⑺ opencv 用摄像头录制视频并储存的问题
cvWaitKey的时间精度可能达不到你的精度
改变cvCreaterVideoWriter里面的帧率并将cvWaitKey的时间改为1000/帧率
⑻ opencv 保存摄像头视频 如何设置帧率
opencv读取视频,摄像头,保存视频最基础的代码
#include "cv.h"
#include "highgui.h"
int main( int argc, char** argv )
{
CvCapture* capture = 0;
IplImage* frame = 0;
capture = cvCaptureFromCAM( 0 );
//capture = cvCaptureFromAVI("1.wmv");//播放视频 就换成这句
int fps=25; //捕捉帧率
//double fps = cvGetCaptureProperty(capture,CV_CAP_PROP_FPS); //视频帧率
CvVideoWriter* writer = 0; //保存就加上这句
int isColol=1;
int frameW=640;
int frameH=480;
writer=cvCreateVideoWriter("out.avi",CV_FOURCC('F','L','V','1'),fps,cvSize(frameW,frameH),isColol);
cvNamedWindow( "摄像头", 1 );
//for(int i=0;i<50;i++) //2秒
for(;;) //一直读
{
frame = cvQueryFrame( capture );
cvWriteFrame(writer,frame );
cvShowImage( "摄像头", frame ); //显示一帧图像
cvWaitKey(1000 / fps);//视频速度
}
cvReleaseVideoWriter(&writer);
cvReleaseImage(&frame);
cvReleaseCapture( &capture );
cvDestroyWindow("摄像头");
return 0;
⑼ VS2010安装了opencv后使用保存视频文件 可是为什么就是保存不成功呢
建议去阅读《Learning OpenCV》,学习opencv的必备,可以当成工具书来用