视屏的本质是一些静态的图像的集合,opencv可以不断读取视屏中的图片,显示,就产生了类似电影的效果。
这样也就可以通过opencv对实时的视屏流进行处理了。
#include "stdafx.h"
#include "cv.h"
#include "highgui.h" int main(){
cvNamedWindow("Example2",CV_WINDOW_AUTOSIZE);//申请可以自动调节大小的窗口Example1
CvCapture *capture=cvCreateFileCapture("F:/film/kq.avi");//读取avi格式的影片
IplImage*frame;
while(){
frame = cvQueryFrame(capture);//读取下一个影片帧率
if(!frame)break;
cvShowImage("Example2",frame);
char c=cvWaitKey(); //每读取一个视频片度就停止33毫秒,并且会收集键盘的输入
if(c == )break;//27就是对应键盘上的ESC建,如果没有按键盘的话C为-1
}
cvReleaseCapture(&capture);
cvDestroyWindow("Example2"); return ;
} 带滚动条的程序
#include "stdafx.h"
#include "cv.h"
#include "highgui.h" int g_slider_position = ;
CvCapture * g_capture =NULL; void onTrackbarSlide(int pos){ //再拖动滚动条的时候,滚动条的位置会被作为int数字传入
cvSetCaptureProperty(
g_capture,
CV_CAP_PROP_POS_FRAMES,
pos
);
} int main(){
cvNamedWindow("Example3",CV_WINDOW_AUTOSIZE);//申请可以自动调节大小的窗口Example1
g_capture=cvCreateFileCapture("F:/film/kq.avi");//读取avi格式的影片 int frames = (int) cvGetCaptureProperty(
g_capture,
CV_CAP_PROP_FRAME_COUNT
); if(frames != ){
cvCreateTrackbar( //进度条
"Position",
"Example3",
&g_slider_position,
frames,
onTrackbarSlide
);
} IplImage * frame;
while(){
frame = cvQueryFrame(g_capture);//读取下一个影片帧率
if(!frame)break;
cvShowImage("Example3",frame);
char c=cvWaitKey(); //每读取一个视频片度就停止33毫秒,并且会收集键盘的输入
if(c == )break;//27就是对应键盘上的ESC建,如果没有按键盘的话C为-1
} cvReleaseCapture(&g_capture);
cvDestroyWindow("Example2"); return ;
}