05-圖像視頻相關操作

視頻操作

1、將視頻每幀拆分爲圖片保存;
2、批量讀取圖片(有序無序讀取);
3、圖片合成視頻;

Code

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

using Emgu.CV;
using Emgu.Util;
using Emgu.CV.CvEnum;
using Emgu.CV.Structure;
using System.IO;
using System.Drawing;

namespace lesson5
{
    class Program
    {
        static void Main(string[] args)
        {
            /*******************視頻分解圖片***********************/
            //VideoCapture cap = new VideoCapture("C:\\Users\\hello\\Desktop\\ADO_NET簡介.mp4");
            //if(!cap.IsOpened)
            //{
            //    Console.WriteLine("open the video failed..");
            //    return;
            //}
            //int i = 0;
            //Mat frame = new Mat();
            //while(true)
            //{
            //    frame = cap.QueryFrame(); //讀一幀
            //    if(frame.IsEmpty)
            //    {
            //        Console.WriteLine("frame is empty ...");
            //        break;
            //    }
            //    i++;
            //    if(i == 200)  //設定保存圖片閾值
            //    {
            //        break;
            //    }
            //    string imgPath = "./pics/" + i.ToString() + ".bmp"; // "./"表示存放於當前目錄下
            //    CvInvoke.Imshow("video", frame);
            //    CvInvoke.Imwrite(imgPath, frame);  //imgPath 爲變量,則將視頻分爲圖片保存
            //    if(CvInvoke.WaitKey(200) == 27)
            //    {
            //        break;
            //    }
            //}
            /*********************批量讀取有序圖片***********************/
            //int i = 1;
            //Mat frame = new Mat();
            //for(int j = 0; j < 200;j++)
            //{
            //    string imgPath = "C:\\Users\\hello\\Desktop\\EmguCVDemo\\lesson5\\lesson5\\bin\\Debug\\pics\\" + i.ToString() + ".bmp";
            //    //string imgPath = "./pics/" + i.ToString() + ".bmp";
            //    frame = CvInvoke.Imread(imgPath, ImreadModes.Color);
            //    CvInvoke.Imshow("video", frame);
            //    CvInvoke.WaitKey(200);  
            //}
            /*********************批量讀取無序圖片***********************/
            //var : 自動類型推斷
            //var files = Directory.GetFiles("C:\\Users\\hello\\Desktop\\Picture", "*.*"); //文件夾下所有類型文件
            //GetFiles()方法一次只能獲取一種類型圖片,可以對圖像類型進行篩選;
            //var files = Directory.GetFiles("C:\\Users\\hello\\Desktop\\Picture", "*.jpg"); //文件夾下 所有jpg文件
            //foreach(var file in files)
            //{
            //    Console.WriteLine(file);
            //}

            //DirectoryInfo dir = new DirectoryInfo("./pics"); //獲取當前文件夾名稱
            //FileInfo[] afi = dir.GetFiles("*.*");  //將所有文件存放在afi中
            //string fileName;

            //for(int i = 0;i < afi.Length;i++)
            //{
            //    fileName = afi[i].Name.ToLower();
            //    if(fileName.EndsWith(".jpg") || fileName.EndsWith(".png")||
            //        fileName.EndsWith(".bmp") || fileName.EndsWith(".jpeg"))  //無序圖片按隨機順序讀取 
            //    {
            //        Console.WriteLine("./pics/" + fileName);
            //        Mat img = CvInvoke.Imread("./pics/"+ fileName);
            //        CvInvoke.Imshow("img", img);

            //        CvInvoke.WaitKey(0);  //手動按鍵切換圖片
            //    }
            //}

            /*****************************圖片合成視頻******************************/
            //視頻合成要求圖片尺寸大小一致,如果不一致,可以Resize()轉化
            VideoWriter writer = new VideoWriter("out.avi",-1,5,new Size(500, 500),false);  //原圖大小爲1024 * 768

            Mat frame = new Mat();
            for(int i = 1; i < 10;i++)
            {
                string imgpath = "./pics/" + i.ToString() + ".bmp";  //字符串格式化
                frame = CvInvoke.Imread(imgpath);

                CvInvoke.Resize(frame, frame, new Size(500, 500));  //Resize圖像大小  可將不同大小尺寸的圖片合成爲視頻

                writer.Write(frame);
                CvInvoke.WaitKey(30);
            }

            Console.WriteLine("視頻寫入結束!");
        }
    }
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章