电子说
从视频中获取帧图片
网络传输数据帧
数据在网络上是以很小的称为帧(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++;
}
}
审核编辑 :李倩
全部0条评论
快来发表一下你的评论吧 !