【发布时间】:2014-05-06 20:42:59
【问题描述】:
我想用指针处理图像以使其更快。起初,我这样做
unsafe
{
double a = 288 / 55;
double b = -215 * 288 / 55;
MIplImage ss = diff.MIplImage;
for (int i = 0; i < ss.height; i++)
{
IntPtr ptr = ss.imageData + i * ss.widthStep;
for (int j = 0; j < ss.width; j++)
{
if (a * j - i + b > 0)
((byte*)(ptr))[j] = 0;
}
}
}
它表现良好(0.5ms,4ms 没有指针)。
然后我发现托管对象应该是固定的,以防止重定位。所以我想应该是这样的
Image<Gray, byte> diff = new Image<Gray, byte>(frame.Width,frame.Height);
fixed (void* p_temp=diff.Ptr.ToPointer()){}
或
fixed (byte* p_temp=(byte*)temp.Ptr){}
但这是错误的。那么如何修复图像?以及如何在 emgucv 中使用指针?我真的很困惑。谢谢!
unsafe
{
var data = diff.Data;
int stride = diff.MIplImage.widthStep;
byte* p;
fixed (byte* pData = data)
{
for (int i = 0; i < diff.Height; i++)
{
p = pData + i * stride;
for (int j = 0; j < diff.Width; j++)
{
if (a * j - i + b > 0)
*(p + j) = (byte)0;
}
}
}
}
【问题讨论】: