首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >使用OpenCV Python从安卓智能手机抓取视频

使用OpenCV Python从安卓智能手机抓取视频
EN

Stack Overflow用户
提问于 2015-07-17 22:25:45
回答 6查看 28.5K关注 0票数 15

我刚刚开始使用Python学习OpenCV,第一个教程从使用内置笔记本电脑摄像头或外部摄像头捕获视频开始。碰巧的是,我两个都没有。所以我想,是否有可能使用我的Android智能手机的摄像头,然后使用IP捕获视频进行进一步处理。

我的智能手机: Moto E

操作系统: Windows 7

语言: Python

Android应用: IP网络摄像头

我已经在网上广泛搜索,但无法找到任何工作的解决方案,所以任何人可以指导我如何使用IP网络摄像头从我的智能手机捕获视频。

很抱歉没有张贴代码,因为我只是进入这个领域的趋势,所以我完全没有头绪。

谢谢。

EN

回答 6

Stack Overflow用户

发布于 2017-05-28 06:11:21

使用urllib和numpy将视频流导入到Python OpenCV;)

代码语言:javascript
运行
复制
import urllib
import cv2
import numpy as np
import time

# Replace the URL with your own IPwebcam shot.jpg IP:port
url='http://192.168.2.35:8080/shot.jpg'

while True:

    # Use urllib to get the image and convert into a cv2 usable format
    imgResp=urllib.urlopen(url)
    imgNp=np.array(bytearray(imgResp.read()),dtype=np.uint8)
    img=cv2.imdecode(imgNp,-1)

    # put the image on screen
    cv2.imshow('IPWebcam',img)

    #To give the processor some less stress
    #time.sleep(0.1) 

    if cv2.waitKey(1) & 0xFF == ord('q'):
        break
票数 12
EN

Stack Overflow用户

发布于 2015-07-17 23:19:32

由于各种原因,这可能比您预期的要难得多。

第一个是带宽。中等大小的原始视频流(640x480像素,8位/通道,每秒30帧)需要200 bits的带宽。虽然USB (2)很容易达到这些速度,但您很难找到可靠的无线连接。

现在你可能在想

为什么我可以在我的手机上观看1080p的网络视频而没有任何问题?

几乎所有通过网络传输的视频都是使用诸如MPEG4、H.264和VP8等专用算法进行压缩的。这些算法极大地减少了传输视频所需的带宽。

太棒了!然后我就可以从我的手机上实时压缩视频并将其流式传输到我的电脑上

还没那么快!这有两个主要的问题。

首先,为了实现视频数据量的急剧减少,视频压缩器(编码器)需要花费大量的处理能力来处理视频。您可能会发现您的手机没有足够的CPU能力(或专用硬件),无法以您的任务可用的分辨率和帧速率编码视频。

如果你设法解决了这个问题,并找到了一个可以完成这项工作的应用程序,那么第二个问题就是,为了获得OpenCV格式的(编码的)视频数据,你需要对其进行解码!您可以找到现成的软件来解码视频文件,但是对于解码实时视频流,您需要编写软件来执行解码(最好使用库或OpenCV itself)。

在这一点上,你会咒骂和后悔你没有花15美元买一个摄像头(但你会在这个过程中学到很多有趣的东西:)

票数 9
EN

Stack Overflow用户

发布于 2020-03-25 15:08:54

你可以简单地使用cv2VideoCapture方法,通过向它传递流url,如IP网络摄像头应用程序所示。以下是示例代码:

注意:如果使用IP网络摄像头应用程序,url的/video后缀是必需的。我是通过在浏览器中查看原始的url页面来发现这一点的。

代码语言:javascript
运行
复制
import cv2
url = "http://192.168.43.1:8080" # Your url might be different, check the app
vs = cv2.VideoCapture(url+"/video")

while True:
    ret, frame = vs.read()
    if not ret:
        continue
    # Processing of image and other stuff here
    cv2.imshow('Frame', frame)
    if cv2.waitKey(1) & 0xFF == ord('q'):
        break
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31478137

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档