如何使用emgucv_基礎技巧_L2_如何撥放錄製好的影片(codeblock+emgucv)

先看這次的目標

我們要在  WindwosForm   視窗應用程式   中    實現   影片撥放的功能


借助 於   emgucv   的  函式庫

可以實現的了喔

首先   我事先   在   codeblock  中    撰寫了    錄製  影片的   程式碼   來錄製一段   avi 影片



#include <opencv/highgui.h>
#include <opencv/cv.h>
#include <opencv/cxcore.h>
#include <stdio.h>
#include <iostream>

int main()
{
    CvCapture *capture;
    IplImage *frame;

    capture=cvCreateCameraCapture(0);
    cvNamedWindow("webcam_open",0);

    CvVideoWriter *writer;
    char FileAviName[]="record.avi";
    int Foramt_Avi = -1;
    int FPS = 30;
    CvSize AviSize = cvSize(640,480);

    int AviColor = 1;

    writer=cvCreateVideoWriter(FileAviName,Foramt_Avi,FPS,AviSize,AviColor);

    int i=0 ;
    while(true)
    {
        frame = cvQueryFrame(capture);
        cvWriteFrame(writer,frame);///將frame寫入writer資料結構
        ///cvWriteFrame(writer資料結構,frame資料結構);

        cvShowImage("webcam_open",frame);
        printf("%d\n",i);

        int key = cvWaitKey(33);
        if(key=='c')
            break;

        /*
        if(key = cvWaitKey(20)>0)
            break;
        */
        i++;
    }

    cvReleaseCapture(&capture);
    cvReleaseVideoWriter(&writer);
    cvDestroyWindow("Webcam");
}


效果
























按下  c  停止錄製
















接著去  撰寫   emgucv  的   撥放影片功能

視窗佈局























首先   宣告  兩個變數
一個用來乘載  video  的  frame
一個用來開啟視訊或讀影片用的





















指定影片路徑  和  抓取影格




























最簡潔俐落的讀影片emgucv code


using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using Emgu.CV;
using Emgu.CV.CvEnum;
using Emgu.CV.Structure;

namespace Emgucv_ex_hand_gesture_recognition
{
    public partial class Form1 : Form
    {
        Image<Bgr, Byte> currentFrame;
        Capture grabber;
        public Form1()
        {
            InitializeComponent();
            grabber = new Emgu.CV.Capture("C:\\img_res\\hand.avi");
            
            Application.Idle += new EventHandler(FrameGrabber);  
        }

        private void FrameGrabber(object sender, EventArgs e)
        {
            //throw new NotImplementedException();
            currentFrame = grabber.QueryFrame();
            if (currentFrame != null)
            {
                imageBox1.Image = currentFrame;
            }
        }
    }
}



效果  如下

























留言

這個網誌中的熱門文章

何謂淨重(Net Weight)、皮重(Tare Weight)與毛重(Gross Weight)

Architecture(架構) 和 Framework(框架) 有何不同?_軟體設計前的事前規劃的藍圖概念

經得起原始碼資安弱點掃描的程式設計習慣培養(五)_Missing HSTS Header