視頻操作
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("視頻寫入結束!");
}
}
}