您如何通过Netcat将树莓派相机V2素材流式传输到OpenCV C ++

时间:2019-03-01 22:08:51

标签: c++ opencv raspberry-pi

编辑:我重写了我复制的代码,现在它成功接收了流,但是当代码到达namedWindow时,我的字符串末尾没有输出或有时“异常终止”

错误:(-215:断言失败)函数'imshow'中的size.width> 0 && size.height> 0

我的电脑:一台debian虚拟机

注意:<>中的内容已替换为我的IP地址

        #include <stdio.h>
#include <opencv2/opencv.hpp>

using namespace cv;
using namespace std;

int main(int argc, char** argv )
{
 VideoCapture vcap;
 Mat image;

 const string videoStreamAddress = "udp://<myIp>:<port>";

 vcap.open("udp://<myIp>:<port>");
 if(!vcap.isOpened())
 {
     printf("nope");
 }
 else
 {
     printf("sucsess");

     namedWindow("stuff", WINDOW_NORMAL);

     imshow("stuff", image);
 }

}

what my raspberry pi executes:

/ opt / vc / bin / raspivid -t 0 -w 300 -h 300 -hf -fps 20 -o-| nc IpAddressInCode PortInCode

1 个答案:

答案 0 :(得分:0)

好吧,显然问题出在

1.ImShow需要显示一个框架,并且在我的代码中没有为“图像”赋值的地方

  1. 为了接收流的输出,我必须逐帧获取它,我不能只显示整个流

错误:(-215:断言失败)函数'imshow'中的size.width> 0 && size.height> 0

#include <stdio.h>
#include <opencv2/opencv.hpp>

using namespace cv;
using namespace std;

int main(int argc, char** argv )
{
 VideoCapture vcap;


 const string videoStreamAddress = "udp://<myIp>:<myPort>";

 vcap.open(videoStreamAddress);
 if(!vcap.isOpened())
 {
     printf("nope");
 }
 else
 {
     for(;;)
     {
         Mat frame;
         vcap >> frame;
         imshow("stuff", frame);
         if( waitKey(10) == 27) break;
     }
     printf("Sucsess!");

 }
return 0;
}