我正在开发一个图像处理程序,我需要从视频中保存一些图片并对它们进行一些处理.当1张图片处理它并没有真正花时间,但是当我在处理100张图片这让我保存文件到我的硬盘的区别,这就是为什么它需要时间的事情是,我的功能m using是一个现成的函数,它只接受(文件名)函数真的很复杂,所以我不能建立自己的函数(如果这是你在想的)
我现在正在考虑两件事,并希望得到你的意见:
感谢您的帮助,非常感谢
这是我的代码,但我仍有问题:
Capture video = new Capture("c:\\5.avi");
Image<Bgr, Byte> Imageframe ;
Dictionary<string, MemoryStream> dict = new Dictionary<string, MemoryStream>();
Imageframe = video.QueryFrame();
Bitmap bmp = Imageframe.ToBitmap();
dict.Add("mypicture.png", new MemoryStream());
bmp.Save(dict["mypicture.png"],imageformat.png);
Run Code Online (Sandbox Code Playgroud)
它说的图像格式在上下文中不存在
这是我使用的函数:
Image<Bgr, byte> result;
result = DrawMatches.Draw("box.png", "box_in_scene.png", out matchTime,i);
Run Code Online (Sandbox Code Playgroud)
您可以使用a保存到RAM(在最宽松的感官中)MemoryStream.如果你想为它们命名,你可以使用a Dictionary<string,MemoryStream>,例如:
Dictionary<string,MemoryStream> dict = new Dictionary<string,MemoryStream>();
dict.Add("mypicture.png",new MemoryStream());
image.Save(dict["mypicture.png"]);
Run Code Online (Sandbox Code Playgroud)
但是你需要编写这些流清除代码,这并没有考虑到最终你可以使用所有的物理内存,然后开始进入分页文件,这无论如何是基于磁盘的.
顺便说一句,如果这是你控制的服务器上,你就没有释放这个软件给最终用户,你可以得到一个使用物理内存作为到Windows中可用的实际磁盘RAM磁盘驱动器(很多周围只是谷歌).然后你可以加载/保存到那个.
非常非常粗糙的 EmguCv变种:
// Global dictionary of memory streams
Dictionary<string,MemoryStream> dict = new Dictionary<string,MemoryStream>();
// Add image memory stream to dictionary
dict.Add("mypicture.png",new MemoryStream());
// Get bitmap from EmguCv
Bitmap bmp = image.ToBitmap();
// Save bitmap to image memory stream
bmp.Save(dict["mypicture.png"],ImageFormat.Png);
// Get bitmap from memory stream
dict["mypicture.png"].Seek(0,SeekOrigin.Begin);
Bitmap new_bmp = Image.FromStream(dict["mypicture.png"]);
// Convert bitmap to EmguCv image
Image<Bgr,Byte> new_img = new Image<Bgr,Byte>(new_bmp);
Run Code Online (Sandbox Code Playgroud)