Emgu/OpenCV:VideoCapture.QueryFrame() 的事件已结束。
Emgu/OpenCV: Event for VideoCapture.QueryFrame() finished.
下面是我的代码的基本思路:
private void CaptureCameraFrame()
{
Capture = new VideoCapture();
CameraModel.Instance.CameraViewMat = Capture.QueryFrame();
// do stuff with queried matrix here
if(noAbortCondition)
{
CaptureCameraFrame();
}
}
该方法应该 运行 在一个单独的线程中使用处理后的当前图像更新我的 GUI。
唯一的问题是,我遇到了两种不同的错误:
- 尝试 read/write 受保护的内存:这发生在第二次 运行 到
方法。
- 我在查询帧后立即使用 `CameraModel.Instance.CameraViewMat 得到空引用错误。
这两个问题似乎是相关的,似乎 QueryFrame()
运行 与其余代码异步,并且在程序跳转到下一步时未完成。
问题是:如何确定从相机中查询图像已经完成,我可以使用矩阵中的信息并开始新的查询?
在所有示例中,我发现这是通过使用时间完成的,但我想在处理完最后一帧后立即开始一个新帧。
关于线程,我在 C# 中并没有真正做太多,但我理解在这种情况下人们会使用 async
和 await
关键字来确保一个方法在一个异步方法完成。但是,在这种情况下我无法进行有效的实施。
您正在重复创建 VideoCapture
class 实例,甚至没有处理它。仅创建一次 VideoCapture
实例并将它们用于您的任务。最后处理一下。
public YourConstructor()
{
Capture = new VideoCapture();
}
private void CaptureCameraFrame()
{
CameraModel.Instance.CameraViewMat = Capture.QueryFrame();
// do stuff with queried matrix here
if(noAbortCondition)
{
CaptureCameraFrame();
}
}
希望它对你有用!
下面是我的代码的基本思路:
private void CaptureCameraFrame()
{
Capture = new VideoCapture();
CameraModel.Instance.CameraViewMat = Capture.QueryFrame();
// do stuff with queried matrix here
if(noAbortCondition)
{
CaptureCameraFrame();
}
}
该方法应该 运行 在一个单独的线程中使用处理后的当前图像更新我的 GUI。 唯一的问题是,我遇到了两种不同的错误:
- 尝试 read/write 受保护的内存:这发生在第二次 运行 到 方法。
- 我在查询帧后立即使用 `CameraModel.Instance.CameraViewMat 得到空引用错误。
这两个问题似乎是相关的,似乎 QueryFrame()
运行 与其余代码异步,并且在程序跳转到下一步时未完成。
问题是:如何确定从相机中查询图像已经完成,我可以使用矩阵中的信息并开始新的查询?
在所有示例中,我发现这是通过使用时间完成的,但我想在处理完最后一帧后立即开始一个新帧。
关于线程,我在 C# 中并没有真正做太多,但我理解在这种情况下人们会使用 async
和 await
关键字来确保一个方法在一个异步方法完成。但是,在这种情况下我无法进行有效的实施。
您正在重复创建 VideoCapture
class 实例,甚至没有处理它。仅创建一次 VideoCapture
实例并将它们用于您的任务。最后处理一下。
public YourConstructor()
{
Capture = new VideoCapture();
}
private void CaptureCameraFrame()
{
CameraModel.Instance.CameraViewMat = Capture.QueryFrame();
// do stuff with queried matrix here
if(noAbortCondition)
{
CaptureCameraFrame();
}
}
希望它对你有用!