c++ - UVC 相机 "Still Pin"在 Linux C++ 中捕获

标签 c++ linux opencv camera directshow

我这里有一个 USB 摄像头,我非常熟悉并且已经使用了一段时间。我可以毫无问题地在 OpenCV 和 Gstreamer 中捕获“静止图像”。但是,此相机的一个用例涉及相机本身的一个按钮,用于拍摄静止图像。

相机有一个“静止针脚”,我已经连接了一个按钮。在带有 DirectShow 的 Windows 中,它可以像您期望的那样工作。在过去的一周里,我一直在寻找一种方法来为我的嵌入式项目在 Linux 中复制这种行为。到目前为止,我还没有找到任何我可以利用的东西。似乎只有 Windows 才支持此功能。

我搜索了以下内容: V4l2 文档 打开简历 meteor uvc流光 紫外线捕捉 luvc View

我还在 Windows 上进行了 USB 嗅探,发现发送了“捕获开始”数据包。虽然我还没有找到一种方法可以在流式传输期间监控来自相机的 USB 流量。从设备捕获时,/dev/video0 正在被 V4l2 使用,我无法读取总线上传输的字节。如果有一种方法可以从相机读取原始数据,我也可以在我的应用程序中处理“静止针”按钮按下。

此时欢迎任何可能的解决方案/想法。我没有想法和网络资源。

最佳答案

事实证明,在 Linux 中有一种方法可以看到按下“静止固定”按钮!

按钮按下显示为一个事件。使用诸如 libevdev 之类的东西,我可以在我的代码中使用它。这个答案主要是在这里找到的:

can't get the mouse move event from /dev/input/event*

这是相机按钮的示例输出:

# input-events 15
/dev/input/event15
   bustype : BUS_USB
   vendor  : 0xc45
   product : 0x62c0
   version : 256
   name    : "Celestron Digital Microscope"
   phys    : "usb-0000:00:14.0-1/button"
   bits ev : EV_SYN EV_KEY

waiting for events
08:34:01.980650: EV_KEY KEY_CAMERA (0xd4) pressed
08:34:01.980650: EV_SYN code=0 value=0
08:34:02.180637: EV_KEY KEY_CAMERA (0xd4) released
08:34:02.180637: EV_SYN code=0 value=0
08:34:02.580673: EV_KEY KEY_CAMERA (0xd4) pressed
08:34:02.580673: EV_SYN code=0 value=0
08:34:02.680676: EV_KEY KEY_CAMERA (0xd4) released
08:34:02.680676: EV_SYN code=0 value=0
08:34:03.580618: EV_KEY KEY_CAMERA (0xd4) pressed
08:34:03.580618: EV_SYN code=0 value=0
08:34:03.780657: EV_KEY KEY_CAMERA (0xd4) released
08:34:03.780657: EV_SYN code=0 value=0
08:34:04.280631: EV_KEY KEY_CAMERA (0xd4) pressed
08:34:04.280631: EV_SYN code=0 value=0
08:34:04.580679: EV_KEY KEY_CAMERA (0xd4) released
08:34:04.580679: EV_SYN code=0 value=0
08:34:05.080636: EV_KEY KEY_CAMERA (0xd4) pressed
08:34:05.080636: EV_SYN code=0 value=0
08:34:05.380704: EV_KEY KEY_CAMERA (0xd4) released
08:34:05.380704: EV_SYN code=0 value=0

如您所见,按钮的按下/释放对系统来说是清晰可见的。我希望这对其他人的搜索有所帮助。

我想我还应该提到按下按钮会在 guvcviewer 中保存静止图像,所以我知道必须支持此类操作。

关于c++ - UVC 相机 "Still Pin"在 Linux C++ 中捕获,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29355100/

相关文章:

java - 使用相机检测真实物体。使用相机寻找真实物体的可能性

c++ - 按类型进行类型安全查找的可变大小异构容器

c - printf() 未打印正确的计算结果

java - .Net 在 Linux 上运行

c++ - 找不到 tbb.dll

c++ - 在 if 语句中将两个数字相除会给出错误的输出

c++ - NodeJS : Native c++ module with multi-threading (openmp)

regex - 什么是最有效的不区分大小写的 grep 用法?

c++ - OPENCV 错误 : undefined reference to "cvLoadImage"

opencv - 为什么 SIFT 花费更多的时间和更少的倍频程层?