Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/161.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ c++;opencv获取编码的网络摄像头流_C++_Opencv_Video Streaming_Webcam - Fatal编程技术网

C++ c++;opencv获取编码的网络摄像头流

C++ c++;opencv获取编码的网络摄像头流,c++,opencv,video-streaming,webcam,C++,Opencv,Video Streaming,Webcam,我目前正在从事一个项目,从网络摄像头捕获视频,并通过UDP发送编码流,以进行实时流 #include "opencv2/highgui/highgui.hpp" #include <iostream> using namespace cv; using namespace std; int main(int argc, char* argv[]) { VideoCapture cap(0); // open the video camera no. 0 double dWidt

我目前正在从事一个项目,从网络摄像头捕获视频,并通过UDP发送编码流,以进行实时流

#include "opencv2/highgui/highgui.hpp"
#include <iostream>

using namespace cv;
using namespace std;

int main(int argc, char* argv[])
{
VideoCapture cap(0); // open the video camera no. 0

double dWidth = cap.get(CV_CAP_PROP_FRAME_WIDTH); //get the width of frames of the video
double dHeight = cap.get(CV_CAP_PROP_FRAME_HEIGHT); //get the height of frames of the video

while (1)
{
    Mat frame;

    bool bSuccess = cap.read(frame); // read a new frame from video

if (!bSuccess) //if not success, break loop
{
cout << "Cannot read a frame from video stream" << endl;
break;
}
return 0;
}
#包括“opencv2/highgui/highgui.hpp”
#包括
使用名称空间cv;
使用名称空间std;
int main(int argc,char*argv[])
{
VideoCapture(0);//打开0号摄像机
double dWidth=cap.get(CV_cap_PROP_FRAME_WIDTH);//获取视频的帧宽度
double dHeight=cap.get(CV_cap_PROP_FRAME_HEIGHT);//获取视频的帧高度
而(1)
{
垫架;
bool bSuccess=cap.read(frame);//从视频中读取新帧
if(!bsucces)//如果不成功,则中断循环
{
cout根据,调用
VideoCapture::read()
相当于调用
VideoCapture::grab()
然后调用
VideoCapture::retrieve()

说它确实解码了帧


为什么不直接使用解码后的帧;在任何情况下,您都可能在远端对其进行解码?

OpenCV API不允许访问编码后的帧

您必须使用更低级的库,可能与设备和平台有关。如果您的操作系统是Linux,可能是一个选项,则必须为Windows/MacOS提供等效的库。您还可以查看一下,它的功能与您想要实现的功能非常类似(仅在Linux上)

请注意,图像的精确编码将取决于您的网络摄像头,一些usb网络摄像头支持mjpeg压缩(甚至h264),但其他摄像头只能发送原始数据(通常在yuv颜色空间中)


另一种选择是使用Opencv抓取解码图像,然后重新编码,例如使用。它具有简单性和可移植性的优点,但图像重新编码将使用更多资源。

为什么不使用解码帧?因为我们需要通过UDP发送,所以我们希望数据尽可能小,解码帧比编码帧大d one如果无法访问底层流进行检查,您如何知道它会变小?在我看来,您最好研究如何对视频流进行转码。因为我们需要通过UDP发送它,所以我们希望数据尽可能小,解码的数据比编码的数据大