课后习题4:
/*******************************************************************************
Copyright (c) 2017-2018, Hangzhou all rights reserved.
--------------------------------------------------------------------------------
filename.cpp(filename.c)
Project Code: video_slide
Module Name:
Date Created: 2018-02-10
Author: HUI
Description:
创建一个程序读入和显示视频,并可以使用滑动条控制进度,一个滑动条用来控制视频的播放
位置,以两秒为步长跳进;另一个滑动条控制视频的开关。
--------------------------------------------------------------------------------
Modification History
DATE NAME DESCRIPTION
--------------------------------------------------------------------------------
YYYY-MM-DD
*******************************************************************************/
/* please include moudle private header files here */
#include"stdafx.h"
#include<opencv2/opencv.hpp>
#include<opencv2/highgui.hpp>
using namespace cv;
using namespace std;
/* 仅包含本C文件使用的头文件. */
/* please define all global variables here */
Mat mFrame;
VideoCapture capture;
/*****************************************************************************
函 数 名:onChange
创建日期:
作 者:
函数描述:滚动条回调函数
输入参数: IN int position
IN
INOUT
输出参数: OUT
INOUT
返回值:
注意点:
------------------------------------------------------------------------------
修改历史
日期 姓名 描述
--------------------------------------------------------------------------
*****************************************************************************/
void onChange(int position, void *userdata)
{ if (position > 0)
{
capture.set(CV_CAP_PROP_POS_FRAMES, position);
imshow("111", mFrame);
}
}
/*****************************************************************************
函 数 名:onOpen
创建日期:
作 者:
函数描述:开关
输入参数: IN
IN
INOUT
输出参数: OUT
INOUT
返回值:
注意点:
------------------------------------------------------------------------------
修改历史
日期 姓名 描述
--------------------------------------------------------------------------
*****************************************************************************/
void onOpen(int position,void * userdata)
{
if (position == 0)
{
Mat mEmpty(Size(500, 500), CV_8UC3);
imshow("111", mEmpty);
capture.release();
cout << "关" << endl;
}
else if (position == 1)
{
capture.open("111.avi");
int iFramesCount = capture.get(CV_CAP_PROP_FRAME_COUNT);
int iFrameRate = capture.get(CV_CAP_PROP_FPS);
cout << "开" << endl;
for (int iPos = 0; iPos <= iFramesCount; iPos = iPos + iFrameRate * 2)
{
createTrackbar("播放进度", "111", &iPos, iFramesCount, onChange, 0);
capture.set(CV_CAP_PROP_POS_FRAMES, iPos);
capture >> mFrame;
if (mFrame.empty())
break;
imshow("111", mFrame);
waitKey(200);
}
}
}
/*****************************************************************************
函 数 名:main
创建日期:
作 者:
函数描述:主函数
输入参数: IN
IN
INOUT
输出参数: OUT
INOUT
返回值:
注意点:
------------------------------------------------------------------------------
修改历史
日期 姓名 描述
--------------------------------------------------------------------------
*****************************************************************************/
int main()
{
namedWindow("111");
int iOpen_CLose = 0;
Mat mFrameCopy(Size(500, 500), CV_8UC3);
createTrackbar("开关", "111", &iOpen_CLose, 1, onOpen, 0);
imshow("111", mFrameCopy);
waitKey(0);
return 0;
}
实验结果:
opencv中通过VideoCaptrue类对视频进行读取操作以及调用摄像头
参考博客:http://blog.csdn.net/weicao1990/article/details/53379881