opencv - 我可以使用opencv将Gstreamer输出存储到缓冲区吗?如果我在管道中添加appsink

标签 opencv gstreamer opencv3.0 encoder gstreamer-1.0

您好,我是gstreamer的新手。到目前为止,我正在使用c++中的opencv中的gstreamer管道对帧进行编码。但是现在我不想转储每个帧。我想对所有帧进行编码并将其存储在大缓冲区中,每当我需要时,我都会转储该缓冲区。所以我该如何在gstreamer opencv中执行appsink。
在我的代码片段下面,我正在编码每个帧并转储

cv::VideoWriter out("appsrc !  videoconvert ! video/x-raw,width=1280,height=720 ! v4l2h264enc ! avimux ! filesink location=hellotest.avi",cv::CAP_GSTREAMER,0,30,cv::Size(1280,720),true);
out.write(Frame);
但是我希望appsink将所有编码的数据存储到缓冲区中,但我不想将其转储或写入。

最佳答案

最简洁的答案是不。
首先,您无法使用VideoWriter同时进行读写。您可以做的是创建两个使用ipcpipeline元素相互通信的管道。
例如

cv::VideoWriter out("appsrc !  videoconvert ! video/x-raw,width=1280,height=720 ! v4l2h264enc ! ipcpipelinesink",...);
cv::VideoCapture cap("ipcpipelinesrc ! ... ! appsink")
但这不会为您提供许多替代方案,因为如果您检查souce codeVideoCapture支持的数据格式非常有限。
// we support 11 types of data:
//     video/x-raw, format=BGR   -> 8bit, 3 channels
//     video/x-raw, format=GRAY8 -> 8bit, 1 channel
//     video/x-raw, format=UYVY  -> 8bit, 2 channel
//     video/x-raw, format=YUY2  -> 8bit, 2 channel
//     video/x-raw, format=YVYU  -> 8bit, 2 channel
//     video/x-raw, format=NV12  -> 8bit, 1 channel (height is 1.5x larger than true height)
//     video/x-raw, format=NV21  -> 8bit, 1 channel (height is 1.5x larger than true height)
//     video/x-raw, format=YV12  -> 8bit, 1 channel (height is 1.5x larger than true height)
//     video/x-raw, format=I420  -> 8bit, 1 channel (height is 1.5x larger than true height)
//     video/x-bayer             -> 8bit, 1 channel
//     image/jpeg                -> 8bit, mjpeg: buffer_size x 1 x 1
// bayer data is never decoded, the user is responsible for that
// everything is 8 bit, so we just test the caps for bit depth 

关于opencv - 我可以使用opencv将Gstreamer输出存储到缓冲区吗?如果我在管道中添加appsink,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63279220/

相关文章:

python - OpenCv 链接器错误 : Symbol not found: ___itt_api_version_ptr__3_0

opencv - API 实现更改为 OpenCV 3.0 而不是 OpenCV 2.4

c# - 如何用twain/emgu/open cv达到好的清晰度?

c++ - OpenCV 图像加载程序退出

c++ - 如何在 openni 和 opencv 中使用 Kinect

c++ - 使用 imgui 显示视频

c - gstreamer opencv 接收和编辑流

c - GStreamer 插件搜索路径?

python - OpenCV 中模板匹配的分辨率操作

python - 如何改进边缘检测并去除图像中的背景?