从视频中获取帧图片

电子说

1.2w人已加入

描述

从视频中获取帧图片

网络传输数据帧

数据在网络上是以很小的称为帧(Frame)的单位传输的,帧由几部分组成,不同的部分执行不同的功能。帧通过特定的称为网络驱动程序的软件进行成型,然后通过网卡发送到网线上,通过网线到达它们的目的机器,在目的机器的一端执行相反的过程。接收端机器的以太网卡捕获到这些帧,并告诉操作系统帧已到达,然后对其进行存储。就是在这个传输和接收的过程中,嗅探器会带来安全方面的问题 。

“帧”数据由两部分组成:帧头和帧数据。帧头包括接收方主机物理地址的定位以及其它网络信息。帧数据区含有一个数据体。为确保计算机能够解释数据帧中的数据,这两台计算机使用一种公用的通讯协议。互联网使用的通讯协议简称IP,即互联网协议。IP数据体由两部分组成:数据体头部和数据体的数据区。数据体头部包括IP源地址和IP目标地址,以及其它信息。数据体的数据区包括用户数据协议(UDP),传输控制协议(TCP),还有数据包的其他信息。这些数据包都含有附加的进程信息以及实际数据。

视频图像帧

帧——就是影像动画中最小单位的单幅影像画面。一帧就是一副静止的画面,连续的帧就形成动画,如电视图象等。通常说帧数,简单地说,就是在1秒钟时间里传输的图片的帧数,也可以理解为图形处理器每秒钟能够刷新几次,通常用FPS(Frames Per Second)表示。每一帧都是静止的图象,快速连续地显示帧便形成了运动的假象。高的帧率可以得到更流畅、更逼真的动画。每秒钟帧数 (fps) 越多,所显示的动作就会越流畅。

关键帧

——任何动画要表现运动或变化,至少前后要给出两个不同的关键状态,而中间状态的变化和衔接电脑可以自动完成,在Flash中,表示关键状态的帧叫做关键帧。

过渡帧

——在两个关键帧之间,电脑自动完成过渡画面的帧叫做过渡帧。

以下例出从视频中获取帧图片

void video2Image()

{

//VideoCapture cap("1.avi");

VideoCapture cap("G:\CBU2_MiddleFrameDetection\imageData\拍摄视频\10.21\直角边\1.avi");

// 获取视频总帧数

long totalFrameNumber = cap.get(CAP_PROP_FRAME_COUNT);

cout << "total frames: " << totalFrameNumber << endl;

Mat frame;

bool flags = true;

long currentFrame = 0;

while (flags) {

// 读取视频每一帧

cap.read(frame);

stringstream str;

str << "a2" << currentFrame << ".jpg";

cout << "正在处理第" << currentFrame << "帧" << endl;

printf(" ");

// 设置每30帧获取一次帧

if (currentFrame % 2 == 0) 

{

// 将帧转成图片输出

imwrite("G:\CBU2_MiddleFrameDetection\imageData\拍摄视频\img10.21\2\" + str.str(), frame);

}

// 结束条件

if (currentFrame >= totalFrameNumber) {

flags = false;

}

currentFrame++;

}

}

审核编辑 :李倩

 

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分