我正在用c#开发与实时监控相关的程序,就像一项研究.
我不打算使用像opencv或emgu...etc这样的库,因为在某些情况下,我需要对像素进行详细的调整,或者在访问所有像素后进行处理。
现在,我的算法基本上是使用Lockbits
和UnlockBits
将像素值复制到一个二维字节数组中,然后我可以从那个字节数组中检索数据。
对于该数组,我使用自定义结构声明它:
struct Pixel
{
Byte B;
Byte G;
Byte R;
}
因此,当我处理RGB位图时,我可以简单地使用:bmp[i,j].R, bmp[i,j].G, bmp[i,j].B
分别访问RGB值。
然而,这种方法会造成很长的处理时间,我想,当位图的分辨率很大时,根据我的经验,320x240是很好的,但是当我处理704x480时,整个系统就卡住了。
我想知道是否有其他方法可以在一次访问所有像素的速度比我的更快,或者有另一种技术来进行实时视频监控?
谢谢
发布于 2014-02-26 14:49:42
这里有很多可谈的..。
1)如您所述,将其固定在内存中,然后通过指针访问它,而不是检查.NET数组之类的数据结构。
2)如果您正在以特定的模式访问数据,请考虑转换/预处理数据。位图通常按行存储在内存中,但如果按列进行访问,则性能会下降。如果您需要按列访问,或者一次访问一个通道,例如,在处理之前,旋转图像或分离通道。
3)提高像素处理代码的效率。
4)并行化(如果可能)。
5)使用GPU :-)
在OpenCV中有很好的.NET包装器,恩古就是其中之一,它提供了免费版本的CUDA支持。
发布于 2014-02-26 14:41:58
这要看你做什么了。
FIrst、不安全代码和指针是一种更快的访问方式。可以大大加快速度。
其次,根据您所做的,将其加载到d3d表面并使用- directx。
https://stackoverflow.com/questions/22044522
复制相似问题