gpt4 book ai didi

c# - EmguCV 在查询高分辨率帧时性能非常差

转载 作者:行者123 更新时间:2023-12-02 16:47:34 26 4
gpt4 key购买 nike

我正在使用 EmguCV 从我定义如下的捕获顺序查询帧:

Capture cap;
private void Form1_Load(object sender, EventArgs e)
{
cap = new Capture();
cap.SetCaptureProperty(Emgu.CV.CvEnum.CAP_PROP.CV_CAP_PROP_FRAME_WIDTH, 1280);
cap.SetCaptureProperty(Emgu.CV.CvEnum.CAP_PROP.CV_CAP_PROP_FRAME_HEIGHT, 720);
timer1.Interval = 20;
timer1.Start();
}
private void timer1_Tick(object sender, EventArgs e)
{
Image<Bgr, byte> img = cap.QueryFrame();
pictureBox1.Image = img.Bitmap;
}

然后我进行了一些操作,例如跟踪对象,但它的性能非常差,我的意思是每大约 200 毫秒我会在删除设置宽度、高度的第 5,6 行时得到新的帧,我得到了很好的性能......

我的问题是如何获得良好的表现......

最佳答案

不建议使用计时器从网络摄像头获取图像,因为它会导致性能下降。当你的程序做的很少,即不处理帧时,最好获取一个帧。查看代码示例 CameraCaptue 以供引用,但您的代码应如下所示。

Capture cap;
private void Form1_Load(object sender, EventArgs e)
{
cap = new Capture();
cap.SetCaptureProperty(Emgu.CV.CvEnum.CAP_PROP.CV_CAP_PROP_FRAME_WIDTH, 1280);
cap.SetCaptureProperty(Emgu.CV.CvEnum.CAP_PROP.CV_CAP_PROP_FRAME_HEIGHT, 720);
Application.Idle += ProcessFrame;
}
private void ProcessFrame(object sender, EventArgs arg)
{
Image<Bgr, Byte> frame = _capture.QueryFrame();
pictureBox1.Image = img.Bitmap;
}

使用这种方法,您不仅限于计时器运行的速度,而是程序正在执行的操作以及相机在其分辨率下获取帧的速度。由于它是一种相当高分辨率的类型(720p),除非您为更高的帧速率类型付费,否则我预计为 15 FPS。

希望这可以帮助,

干杯,

克里斯

关于c# - EmguCV 在查询高分辨率帧时性能非常差,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8070880/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com