使用Android手机摄像头作为Web Cam与OpenCV / C ++

问题描述 投票:2回答:2

我需要一个移动相机作为网络摄像头。我需要进一步处理我的openCV应用程序的摄像头视频。但是可用于此目的的软件缺少api所需的文档。 (我的意思是如何访问手机摄像头界面)所以任何人都可以给我这个场景的好建议。提前致谢。

c++ opencv
2个回答
0
投票

我认为,这实际上不是openCV的问题。我假设应用程序将在PC上运行。您有两种选择:

  1. 尝试使用特定于设备的驱动程序与手机的相机连接。也许其中一些人支持这样的功能。
  2. 为您的手机编写应用程序,该应用程序将通过WiFi,蓝牙或其他方式流式传输视频。然后编写一组驱动程序,它们将尝试检索视频源并作为网络摄像头提供给操作系统。

第三个选项涉及在移动设备上录制视频,然后将其传输到PC,但我想,这不是一个选项。


1
投票

为了使其工作,我们首先需要一个移动客户端。您可以在Android手机上下载“IP webcam”应用程序。配置端口(例如:2333)并启动服务器。

如果您的计算机和移动设备连接到同一本地网络,则可以在计算机的Web浏览器上键入手机应用程序中显示的IP地址。那应该没问题。通过这种方式,流通过wifi传输,这是很慢的。

要提高速度,您可以通过USB连接。我们将通过USB重定向TCP流。打开Android设备上的调试模式,并在您的计算机上安装Android ADB工具。要转发流,语法为:

adb forward <local> <remote>
for example:
./adb forward tcp:5555 tcp:2333 

将手机的192.168.XX.XX:2333转发到电脑的http://localhost:5555/

然后你可以使用这个链接。

要在OpenCV项目中使用,请尝试以下示例:

#include <opencv2/opencv.hpp>
#include <iostream>

int main(int, char**) {
    cv::VideoCapture vcap;
    cv::Mat image;

    const std::string videoStreamAddress = "http://localhost:5555/video";
       //open the video stream and make sure it's opened
    if(!vcap.open(videoStreamAddress)) {
        std::cerr << "Error opening video stream or file" << std::endl;
        return -1;
    }

    for(;;) {
        vcap.read(image);
        cv::imshow("Output Window", image);

        if(cv::waitKey(1) >= 0) break;
    }

}
© www.soinside.com 2019 - 2024. All rights reserved.