#include <cv.h>
#include <highgui.h>
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <assert.h>
#include <math.h>
#include <ctype.h>
#include <limits.h>
#include <float.h>
#include <opencv2/opencv.hpp>
using namespace std;
using namespace cv;
int function1(void)
{
std::string videoFile="tree.avi";//播放视频名称
VideoCapture cap;//创建视频句柄
cap.open(videoFile);//打开视频
if(!cap.isOpened())//判断是否打开
{
fprintf(stderr,"cap flash\n");//出错退出
return -1;
}
Mat frame;//Mat --IplImage--cvMat
while(cap.read(frame))//读一帧图片
{
imshow("function1-tree",frame);//显示imshow包含了创建窗口
char c = cvWaitKey(33);//获取键盘输入,也是控制视频的播放速度
if(c==27) //ESC退出
break;
}
destroyAllWindows();//销毁全部窗口---destroyWindow()销毁特定窗口
return 0;
}
int function2(void)
{
cvNamedWindow("function2-tree");//创建窗口,当cvNamedWindow("function2-tree",0);窗口可以改变大小
CvCapture * capture = cvCreateFileCapture("tree.avi");//打开视频文件
IplImage * frame=NULL;
while(1)
{
frame = cvQueryFrame(capture);//从文件中获取一帧图片
if(!frame)break;
cvShowImage("function2-tree",frame);//显示图片
char c = cvWaitKey(33);
if(c==27)
break;
}
cvReleaseCapture(&capture);
cvDestroyWindow("function2-tree");
return 0;
}
int g_slider_position = 0;
CvCapture * g_capture =NULL;
void onTrackbarSlide(int pos)//再拖动滚动条的时候,滚动条的位置会被作为int数字传入
{
cvSetCaptureProperty(
g_capture,
CV_CAP_PROP_POS_FRAMES,
pos
);
}
int function3(void)//带进度条
{
cvNamedWindow("function3-tree",CV_WINDOW_AUTOSIZE);//申请可以自动调节大小的窗口Example1
g_capture=cvCreateFileCapture("tree.avi");//读取avi格式的影片
int frames = (int) cvGetCaptureProperty(g_capture,CV_CAP_PROP_FRAME_COUNT);
if(frames != 0)
{
cvCreateTrackbar(//进度条
"Position",
"function3-tree",
&g_slider_position,
frames,onTrackbarSlide);
}
IplImage * frame=NULL;
while(1)
{
frame = cvQueryFrame(g_capture);//读取下一个影片帧率
if(!frame)
break;
cvShowImage("function3-tree",frame);
char c=cvWaitKey(33); //每读取一个视频片度就停止33毫秒,并且会收集键盘的输入
if(c == 27)
break;//27就是对应键盘上的ESC建,如果没有按键盘的话C为-1
}
cvReleaseCapture(&g_capture);
cvDestroyWindow("function3-tree");
return 0;
}
int function4(void)//VideoCapture 打开摄像头
{
//自动打开摄像头,如果知道pc外接摄像头可以查把-1改为摄像头的设备号
VideoCapture cap(-1);
//linux 在/dev目录下面可查看通常为0,arm通常为3
if(!cap.isOpened())
{
printf("cap.isOpened is error\n");
return -1;
}
//set()可以设置摄像头的一些参数,get()获得摄像头配置
cap.set(CV_CAP_PROP_FPS, 30);//帧率
cap.set( CV_CAP_PROP_FRAME_WIDTH, 280);//宽
cap.set(CV_CAP_PROP_FRAME_HEIGHT, 40);//高
Mat frame;
//用来设置需要保存视频的格式;或者使用fourcc=FOURCC(*'xvid')
//用来设置保存的视频名字已经格式,帧率,分辨率
//CvVideoWriter* out=VideoWriter('output.avi',VideoWriter_fourcc(*'XVID'),20,cvSize(640,480));
while(cap.read(frame))//读一帧图片
{
// out->write(frame);//开始保存
imshow("function1-tree",frame);//显示imshow包含了创建窗口
char c = cvWaitKey(33);//获取键盘输入,也是控制视频的播放速度
if(c==27) //ESC退出
break;
}
destroyAllWindows();//销毁全部窗口---destroyWindow()销毁特定窗口
return 0;
}
int function5(void)//CvCapture
{
CvCapture* capture=cvCaptureFromCAM(-1); //随机打开摄像头
// CvCapture*capture=cvCreateFileCaptur("555.mp4"); 打开视频
IplImage * frame=NULL;
int n;
frame = cvQueryFrame(capture);//从文件中获取一帧图片
CvVideoWriter* video=cvCreateVideoWriter("camera.avi", CV_FOURCC('X', 'V', 'I', 'D'), 25,cvSize(frame->width,frame->height));
while(1)
{
frame = cvQueryFrame(capture);//从文件中获取一帧图片
if(!frame)
break;
n=cvWriteFrame(video,frame);
cvShowImage("ddd",frame);//显示图片
char c = cvWaitKey(33);
if(c==27)
break;
}
cvReleaseCapture(&capture);
cvDestroyWindow("ddd");
return 0;
}
int g_Pos=0;//用来标定滚动条当前的位置
//将打开的视频文件作为一个全局变量使用
CvCapture * g_Capture=NULL;
//当拖动滚动条后,会回调这个函数
//同时会将当前滚动条的位置以32 位形式传递过来
void CallBackTrackBarSlide(int pos)
{
//这里便是重新设置视频文件当前播放的帧
cvSetCaptureProperty(g_Capture,CV_CAP_PROP_POS_FRAMES,pos);
g_Pos=pos;
}
int function6(void)
{
//建立一个名字叫做Demo04 的窗体
cvNamedWindow("Demo04",CV_WINDOW_AUTOSIZE);
//根据参数打开指定的视频文件
g_Capture=cvCreateFileCapture("tree.avi");
//获得总的帧数
int totalFrames=(int)cvGetCaptureProperty(g_Capture,CV_CAP_PROP_FRAME_COUNT);
if(totalFrames!=0)
{
//创建滚动条,在这里指定了滚动条拖动后的回调函数
cvCreateTrackbar("TrackBar","Demo04",
&g_Pos,totalFrames,CallBackTrackBarSlide);
}
IplImage * frame;
//循环的顺序的遍历所有的帧
while(1)
{
//获取当前帧的下一个帧
frame=cvQueryFrame(g_Capture);
if(!frame)
{
break;
}
cvShowImage("Demo04",frame);
char chKeyCode=cvWaitKey(30);
if(chKeyCode==27)
{
break;
}
g_Pos++;
//当播放完2个帧的时候才触发滚动条滚动
if(g_Pos%1==0)
{
cvSetTrackbarPos("TrackBar","Demo04", g_Pos);
}
}
cvReleaseCapture(&g_Capture);
cvDestroyWindow("Demo03");
return 0;
}
int main(int argc,const char**argv)
{
//function1();//打开视频1
//function2();//打开视频2
//function3();//带快进快退视频3
//function4();//打开摄像头1
function5();//打开摄像头2
//function6();//带进度条的视频4
return 0;
}
没有合适的资源?快使用搜索试试~ 我知道了~
opencv 摄像头和视频操作的几种方法
共62个文件
tlog:42个
manifest:2个
pdb:2个
4星 · 超过85%的资源 需积分: 50 45 下载量 60 浏览量
2016-02-25
20:21:55
上传
评论 2
收藏 1.94MB ZIP 举报
温馨提示
opencv 摄像头和视频操作的几种方法 打开摄像头的两种方法以及保存录制保存视频的方法 带快进快退和实时显示当前视频进度
资源推荐
资源详情
资源评论
收起资源包目录
avi.zip (62个子文件)
avi
avi.suo 9KB
Debug
avi.exe 48KB
tree.avi 1.25MB
avi.pdb 1.65MB
avi.ilk 925KB
avi.sln 881B
avi
Debug
cl.command.1.tlog 558B
link.8456-cvtres.read.1.tlog 2B
link.18468.write.1.tlog 2B
link.6068-cvtres.write.1.tlog 2B
link.8456.write.1.tlog 2B
link.6068-cvtres.read.1.tlog 2B
link.9752.read.1.tlog 2B
avi.exe.embed.manifest.res 472B
rc.command.1.tlog 396B
CL.read.1.tlog 14KB
link.13164-cvtres.read.1.tlog 2B
link.10388.read.1.tlog 2B
vc100.idb 595KB
mt.read.1.tlog 210B
link.6068.read.1.tlog 2B
link.9752-cvtres.write.1.tlog 2B
link.6472-cvtres.read.1.tlog 2B
link-cvtres.read.1.tlog 2B
link.read.1.tlog 7KB
link.6472-cvtres.write.1.tlog 2B
avi.exe.embed.manifest 406B
avi.exe.intermediate.manifest 381B
rc.read.1.tlog 182B
link.write.1.tlog 458B
link.13164.read.1.tlog 2B
CL.write.1.tlog 198B
link.8456.read.1.tlog 2B
link.9752.write.1.tlog 2B
vc100.pdb 1.13MB
link.8456-cvtres.write.1.tlog 2B
main.obj 167KB
link.18468.read.1.tlog 2B
link.18468-cvtres.read.1.tlog 2B
link.command.1.tlog 3KB
link.9752-cvtres.read.1.tlog 2B
avi.log 3KB
link.10388-cvtres.read.1.tlog 2B
link.10388-cvtres.write.1.tlog 2B
link.6472.read.1.tlog 2B
link.13164.write.1.tlog 2B
mt.write.1.tlog 210B
link.18468-cvtres.write.1.tlog 2B
avi.lastbuildstate 41B
link.6068.write.1.tlog 2B
link.10388.write.1.tlog 2B
link.13164-cvtres.write.1.tlog 2B
mt.command.1.tlog 314B
avi_manifest.rc 196B
rc.write.1.tlog 190B
link-cvtres.write.1.tlog 2B
link.6472.write.1.tlog 2B
avi.vcxproj.filters 1KB
main.cpp 5KB
avi.vcxproj.user 143B
avi.vcxproj 5KB
avi.sdf 404KB
共 62 条
- 1
资源评论
- yelenn11152021-02-04CSDN 过去下载,效果可以
- MaloFleur2016-07-25可以运行,但是摄像头还有视频都读取不出来
听雨听风眠
- 粉丝: 656
- 资源: 24
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功