我QueryFrame
一个接一个地使用两个命令来获取帧并使用CvInvoke.cvAbsDiff
. 差异图像始终是黑色的,尽管在我的视频中每一帧都有明显的变化。
我尝试最多跳过五帧(通过使用连续QueryFrame
命令)并且总是得到一个黑帧。
如果我均衡两个帧之一的直方图,AbsDiff
则返回结果。因此我假设QueryFrame
返回相同的帧。
如何获得两个连续的帧?有任何想法吗?
对评论感到抱歉...这是我发现有用的解决方案:
private Capture myCapture;
private Image<Bgr, Byte> frame1;
private Image<Bgr, byte> frame2;
private void myFunction1()
{
myCapture = new Capture(@"AnyVideoFileName");
frame1 = myCapture.QueryFrame();
}
private void myEventMethod(object sender, EventArgs e)
{
Application.Idle += myFunction2;
}
private void myFunction2(object sender, EventArgs e)
{
frame2 = myCapture.QueryFrame();
Image<Gray, Byte> frame1g = frame1.Convert<Gray,Byte>();
Image<Gray, Byte> frame2g = frame2.Convert<Gray,Byte>();
Image<Gray, Byte> diffFrame = frame2g.Clone();
CvInvoke.cvAbsDiff(frame1g, frame2g, diffFrame);
frame1 = frame2.Clone();
}
上面的代码只是为了让您了解它是如何完成的。没有包括异常处理,没有检查,没有优化。