2

我正在开发一个图像处理程序,我需要从视频中保存一些图片并对它们进行一些处理。处理 1 张图片时实际上并不需要时间,但是当我处理 100 张图片时,我将文件保存到硬盘上会有所不同,这就是为什么需要时间的原因是,我的功能m using 是一个现成的函数,它只接受(文件名)该函数非常复杂,所以我无法构建自己的函数(如果这是你的想法)

我现在在想两件事,想听听你对它们的看法:

  1. 改变函数的输入,但是如何?有没有办法将此输入从(文件名)更改为包含这些图片的数组?
  2. 将文件保存到内存。但是如何按名称将文件保存到ram,并能够在函数中将它们用作(文件名)?

感谢您的帮助,非常感谢

这是我的代码,但我仍然有问题:

            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);    

它所说的图像格式在上下文中不存在

这是我使用的功能:

Image<Bgr, byte> result;
                 result = DrawMatches.Draw("box.png", "box_in_scene.png", out matchTime,i); 
4

3 回答 3

5

您可以使用MemoryStream. 如果你想给它们命名,你可以使用 a Dictionary<string,MemoryStream>,例如:

Dictionary<string,MemoryStream> dict = new Dictionary<string,MemoryStream>();

dict.Add("mypicture.png",new MemoryStream());

image.Save(dict["mypicture.png"]);

但是,您需要为这些流编写清理代码,这并没有考虑到最终您可能会用完所有物理 RAM,然后开始进入页面文件,无论如何它都是基于磁盘的。

顺便说一句,如果这是在您控制的服务器上,并且您没有将该软件发布给最终用户,您可以获得一个 RAM 磁盘驱动器(仅在 Google 附近就有很多),它使用物理 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);
于 2013-01-28T12:34:26.700 回答
1

尝试使用MemoryStream与文件一样处理内存,并尝试通过线程将文件保存在硬盘上

于 2013-01-28T12:35:16.253 回答
0

我了解您正在使用您没有源代码的 DLL。您也许可以将其加载到反射器中,并对其进行修改以将图像作为参数而不是文件名。我过去使用过 Red Gate 的反射器,它对我有用:http ://www.reflector.net/

于 2013-01-28T12:37:46.277 回答