当前位置: 首页 > 知识库问答 >
问题:

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

乐正涵意
2023-03-14

我目前正在做一个项目,从网络摄像头捕捉视频,并通过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;
}

有人说从cap.read得到的帧已经是解码帧,我不知道这是如何以及何时发生的。我想要的是编码的帧或流。我应该怎么做才能得到它?我应该再编码一次吗?

共有2个答案

南门欣怡
2023-03-14

OpenCV API不提供对编码帧的访问权限。

您将不得不使用更低级的库,可能依赖于设备和平台。如果您的操作系统是Linux,Video4Linux2可能是一个选项,那么必须为Windows/MacOS提供等效的库。您还可以看看mjpg streamer,它的功能与您想要实现的功能非常相似(仅在linux上)。

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

另一个选项是使用Opencv获取解码图像,并对其重新编码,例如使用imencode。它具有简单性和可移植性的优点,但图像再编码会占用更多的资源。

龙珂
2023-03-14

根据文档,调用VideoCapture::read()相当于调用VideoCapture::grab()然后调用VideoCapture::retrieve()

检索函数的文档说它确实解码了帧。

为什么不直接使用解码帧;想必你无论如何都会在远端解码?

 类似资料:
  • 本文向大家介绍FFmpeg获取网络摄像头数据解码,包括了FFmpeg获取网络摄像头数据解码的使用技巧和注意事项,需要的朋友参考一下 对USB摄像头实时编码,在前面已经探讨过了。这次改变下思路,尝试去截取网络摄像头的H264码流,将其解码播放。 这里的测试代码,是在海康摄像头的基础上进行的。 解码的大致流程和以前的保持一致,只不过增加了部分函数。 FFmpeg打开媒体文件并查看媒体文件的信息,有三个

  • 问题内容: 我想获取Macbook的网络摄像头流(集成的iSight网络摄像头)。 我使用Java,但对Objective-C一无所知,因此我正在寻找“全Java”解决方案。我找到了一些示例,但它们是2005年制造的,无法在我的系统上使用。 问题答案: 我现在自己也遇到了同样的事情。我正在为项目使用VLCJ,它在Windows,Linux Mint,Linux Ubuntu和Mac OSX Lio

  • 对于我正在进行的计算机视觉项目,我需要使用Logitech C920网络摄像头抓取图像。我使用OpenCV的视频捕获来实现这一点,但我面临的问题是,我在某个时刻拍摄的图像没有显示相机看到的最新情况。也就是说,如果我在时间戳t处拍摄一张图像,它显示了相机在时间戳(t-delta)处看到的东西,也就是说。 为此,我编写了一个程序,使计数器递增并在屏幕上显示。我把相机对准屏幕,让它录下来。当计数器达到某

  • 问题内容: 如何连续从摄像头捕获图像? 我想尝试对象识别(也许使用Java Media Framework)。 我当时正在考虑创建两个线程 一个线程: 节点1:捕获实时图像 节点2:将图片另存为“ 1.jpg” 节点3:等待5秒 节点4:重复… 其他线程: 节点1:等到捕获图像 节点2:使用“ 1.jpg”获取每个像素的颜色 节点3:将数据保存在数组中 节点4:重复… 问题答案: 此JavaCV实

  • 我正在开发一个web应用程序,它可以浏览和拍摄本地照片,我还想通过相机拍摄图像。我使用下面的代码,我可以捕捉设备摄像头。 现在,我想获得图像和onchangeevent,转换为base64,并希望在该页面中显示。 好心帮我伙计们!

  • 问题内容: 我是Stackoverflow和OpenCV编程领域的新手。我已经使用Java的OpenCV绑定(opencv.org官员,而不是JavaCV)进行了一些项目,例如通过ORB和SURF功能识别对象,使用图像。一切都没问题。现在,我将转向视频流中的对象识别。我想从摄像头中获取视频流并应用对象识别。我不是Java专家,所以我在OpenCV中找到了VideoCapture类,但无法从摄像机获