【问题标题】:OpenCV Capture from external camera从外部摄像头捕获 OpenCV
【发布时间】:2012-05-02 03:43:53
【问题描述】:

我目前正在使用 OpenCV 编写一个实时应用程序,在以下情况下: 我正在尝试从插入 firewire 800 的 HDV 摄像机捕获图像。 我试图循环在 cvCaptureFromCam 上使用的索引, 但找不到摄像头(网络摄像头除外)。

这是我的代码示例,它在索引上循环(转义 0 因为它是网络摄像头的索引):

CvCapture* camera;
int index;
for (index = 1; index < 100; ++index) {
    camera = cvCaptureFromCAM(index);
    if (camera)
        break;
}    
if (!camera)
    abort();

在中止时停止。

我正在 OSX 10.7 上编译并且我已经测试过:

  • OpenCV 1.2 私有框架
  • OpenCV 2.0 私有框架(可在此处找到:OpenCV2.0.dmg)
  • 自己编译的OpenCV(第2版)

我知道这个问题是已知的,对此有很多讨论, 但我找不到任何解决方案。

有人遇到过同样的情况吗?

问候。

【问题讨论】:

  • 我在编辑中发布了一些代码。有关信息,我的相机是 Sony HDV-HC1E。它使用 i-link 输出,我尝试过 HD、DV 和不同分辨率的输出视频。
  • 试试这段代码,它可能会有所帮助:pastebin.com/i0Kb2xNv 这是来自@juanchopanza,不过它是用于网络摄像头的,我希望它会有所帮助

标签: c macos opencv firewire


【解决方案1】:

要明确选择火线,也许您可​​以尝试将 300 添加到您的索引中?至少在 OpenCV 2.4 中,每种类型的相机都有一个特定的域。例如,Video4Linux 的域是 200,所以 200 是第一个 V4L 摄像头,201 是第二个,等等。对于 Firewire,域是 300。如果您指定的索引小于 100,OpenCV 只会遍历其中的每个域顺序,可能不是您期望的顺序。例如,它可能会先找到您的网络摄像头,而永远不会找到火线摄像头。如果这不是问题,请接受我的道歉。

【讨论】:

    【解决方案2】:

    index 应该从 0 而不是 1 开始。

    如果这不起作用,可能是 OpenCV 不支持您的相机。我建议你检查它是否在compatibility list中。

    【讨论】:

    • 感谢您的帮助,我知道索引从 0 开始,但这是我的网络摄像头的索引,我想跳过它并获取我的火线摄像头。我也尝试过 index -1(适用于任何相机),但效果是一样的:找到了网络摄像头,而不是我的火线摄像头。
    • 更新答案(刷新页面)。
    • 很抱歉听到这个消息。考虑通过单击旁边的复选框来接受我的回答,以便其他人将来可以从您的问题中受益。
    • 什么相机使用人们实时做的?
    • 什么定义了实时捕获?如果它能够提供超过每秒 25 甚至 30 帧的能力,那么 OpenCV 支持的大多数相机都可以做到实时。
    猜你喜欢
    • 2012-01-28
    • 2015-08-18
    • 2016-03-16
    • 1970-01-01
    • 2021-10-21
    • 1970-01-01
    • 1970-01-01
    • 2014-03-17
    • 2014-09-07
    相关资源
    最近更新 更多