使用 Emgu CV 运行相机

Posted

技术标签:

【中文标题】使用 Emgu CV 运行相机【英文标题】:Running the camera using Emgu CV 【发布时间】:2017-12-18 06:59:44 【问题描述】:

我想做人脸识别系统。现在,我正在尝试运行相机,但是我很难访问相机。这是我的代码:

public partial class Camera : Form

    private Capture capture;
    private HaarCascade haarCascade;
    Timer timer;

    public Camera()
    
        InitializeComponent();
    

    private void pictureBox1_Click(object sender, EventArgs e)
    
        capture = new Capture();
        haarCascade = new HaarCascade(@"haarcascade_frontalface_alt_tree.xml");
        timer = new Timer();
        timer.Tick += new EventHandler(timer1_Tick);
        timer.Interval = new TimeSpan(0, 0, 0, 0, 1);
        timer.Start();
            

timer.Interval = new TimeSpan(0, 0, 0, 0, 1); 中有错误。

这是错误:

严重性代码描述项目文件行抑制状态 错误 CS0029 无法将类型“System.TimeSpan”隐式转换为“int”Attendance_Marking_System c:\users\redpranger\documents\visual studio 2017\Projects\Attendance_Marking_System\Attendance_Marking_System\Camera.cs 34 Active

【问题讨论】:

【参考方案1】:

Timer.Interval PropertyDouble 类型的属性,而不是 Timespan

这是属性的定义:

获取或设置引发 Elapsed 事件的时间间隔,以毫秒为单位。

要将间隔设置为 1 秒(1000 毫秒),请按如下方式设置:

timer.Interval = 1000;

或者在你的例子中,在 1 毫秒:

timer.Interval = 1;

【讨论】:

【参考方案2】:
timer.Interval = new TimeSpan(0, 0, 0, 0, 1).TotalMilliseconds;

或者你可以试试

timer.Interval = 1; // 1ms

你不需要每 1ms 刷新一次相机我不认为你的相机有那么多 fps 所以在你的情况下30ms就可以了 所以试试

timer.Interval = 30; // for 30 ms

【讨论】:

虽然您的回答在技术上是正确的,但我不认为创建一个结构只是为了获得毫秒数。 你是对的,实际上他不需要使用 TimeSpan。我写它只是为了让他明白,如果他想给时间间隔赋值,他需要使用 TotalMiliseconds 属性来转换它【参考方案3】:

答案很简单, 你所要做的就是

要将间隔设置为 1 秒(1000 毫秒),请按如下方式设置:

timer.Interval = 1000;

【讨论】:

以上是关于使用 Emgu CV 运行相机的主要内容,如果未能解决你的问题,请参考以下文章

如何在emgu CV中进行相机校准后访问旋转和平移向量

Emgu CV 人脸识别:在多个文件上并行运行 DetectHaarCascade 问题

Emgu.CV.CvInvoke”的类型初始值设定项引发异常

Emgu.CV

Emgu CV EigenObjectRecognizer 不工作

wpf怎么添加emgu.cv.ui.dll