从视频中获取帧图片的方法

数据在网络上是以很小的称为帧(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("\n");



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

        if (currentFrame % 2 == 0) 

        {

            // 将帧转成图片输出

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

        

        }

        // 结束条件

        if (currentFrame >= totalFrameNumber) {

            flags = false;

        }

        currentFrame++;

    }

}

版权声明:本文内容转自互联网,本文观点仅代表作者本人。本站仅提供信息存储空间服务,所有权归原作者所有。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至1393616908@qq.com 举报,一经查实,本站将立刻删除。

(0)

相关推荐

发表回复

登录后才能评论