将视频从Raspberry pi流式传输到远程计算机上的Opencv应用程序

时间:2017-07-05 20:31:49

标签: opencv raspberry-pi netcat

我想要实现的是,我有一个覆盆子3与pi摄像头v2连接到我的本地wifi。我想将覆盆子pi中的实时视频传输到运行Ubuntu的计算机上。在我的电脑上,我试图用opencv实时处理该视频。下面的代码只是一个示例代码,用于测试来自我的Ubuntu计算机上的覆盆子pi的视频。我使用netcat来传输视频,我在代码下面列出了shell脚本。

#include <opencv2/highgui/highgui.hpp>
#include <opencv2/imgproc/imgproc.hpp>
#include <iostream>
using namespace std;
using namespace cv;

int main(int argc, char** argv)
{


    VideoCapture cap;
    cap.open("/dev/stdin");
    if (!cap.isOpened())
        return -1;

    Mat edges;
    namedWindow("edges",1);
    for(;;){
        Mat frame;
        cap>>frame;
        imshow("edges",frame);
        if(waitKey(30)>=0)break;
    }   

    return 0;
}

这是在opencv中播放流的代码。

  1. 首先,我使用将流重定向到我的opencv应用程序。 nc -l -p 5001 | ./app
  2. 然后运行我的覆盆子相机并使用netcat流式传输它 raspivid -t 999999 -o | nc x.x.x.x 5001 x是客户端pc ip地址。
  3. 这对我不起作用,但我用mplayer尝试过 通过运行nc -l -p 5001 | mplayer -fps 31 -cache 1024 - 它完美无缺。

    我认为我的问题是我没有在我的opencv应用程序上正确捕获流。我需要帮助。

1 个答案:

答案 0 :(得分:1)

我花了大约4个小时试图完成这项工作并最终使其工作。我不确定哪个是关键步骤,也不确定原因,但我发现如果我在我的Ubuntu 16 LTS VirtualBox上安装以下软件包,它一切正常:

libtbb2
ffmpeg
libavcodec
libavcodec-dev
libavformat-dev
libtbb-dev
libswscale-dev
libgtk2.0-dev
libtbb-dev
libjpeg-dev
libpng-dev
libtiff-dev
libjasper-dev
libdc1394-22-dev
libv4l-dev
libx264-dev

在我的Raspberry Pi上运行相机:

raspivid -ih -w 1024 -h 768 -o - | nc 192.168.0.98 5001

关键字: Raspberry Pi,RASPI,raspivid,相机,OpenCV,流媒体,流媒体,netcat,nc,网络,视频