我正在开发一个图像处理程序,我需要从视频中保存一些图片并对它们进行一些处理。 在处理1张图片时,它并不需要时间, 但是,当我处理100张图片时,它会有所不同 我将文件保存到我的硬盘上,这就是为什么需要时间 问题是,我正在使用的函数是一个现成的函数,它只接受(文件名) 这个函数非常复杂,所以我无法构建自己的函数(如果这就是你的想法)
我现在正在考虑两件事情,并希望对你有所了解:
非常感谢你的帮助,非常感谢
这是我的代码,但我仍有问题:
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);
它的说法imageformat在上下文中不存在
这是我使用的函数:
Image<Bgr, byte> result;
result = DrawMatches.Draw("box.png", "box_in_scene.png", out matchTime,i);
答案 0 :(得分:5)
您可以使用MemoryStream
保存到RAM(在最宽松的感官中)。如果您想为它们命名,可以使用Dictionary<string,MemoryStream>
,例如:
Dictionary<string,MemoryStream> dict = new Dictionary<string,MemoryStream>();
dict.Add("mypicture.png",new MemoryStream());
image.Save(dict["mypicture.png"]);
然而,您需要为这些流编写清理代码,这并没有考虑到最终您可以用完所有物理RAM然后开始进入分页文件,无论如何都是基于磁盘的。
顺便说一句,如果这是在你控制的服务器上,并且你没有将这个软件发布给最终用户,那么你可以获得一个RAM磁盘驱动器(很多只是谷歌),它使用物理RAM作为Windows可用的实际磁盘。然后你可以加载/保存到那个。
非常非常粗糙 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);
答案 1 :(得分:0)
尝试使用MemoryStream 来处理与文件一样的内存, 并尝试通过thread
将文件保存在硬盘上答案 2 :(得分:0)
我知道你正在使用一个你没有源代码的DLL。 您可以将其加载到反射器中,并对其进行修改以将图像作为参数而不是文件名。 我过去使用过Red Gate的反射器,它对我很有用:http://www.reflector.net/