GstBuffer 到颜色垫

GstBuffer to color Mat

GstBuffer *gstImageBuffer = gst_app_sink_pull_buffer((GstAppSink*)app_data.gst_data.sink);
Mat matLeft = Mat(Size(width, height),CV_8U, (char*)GST_BUFFER_DATA(gstImageBuffer));

我可以提取缓冲区并转换为 OpenCv Mat 对象,但是是灰度的。我想拉缓冲区的颜色。我知道我的流是彩色的,在终端中创建相同的管道。我一直在寻找没有成功的解决方案。我正在使用 gstreamer-0.10 和 opencv-2.4.10。

终于在这个 post Changing cv::Mat with image copied from buffer affects original image 的帮助下,我可以拉出彩色缓冲区。现在缓冲区的大小是有意义的,640*360*3.

我不得不 link 以不同的方式使用 ffmpegcolorspace 元素的 appsink:

gst_element_link_filtered(data->gst_data.converter, data->gst_data.sink, gst_caps_new_simple("video/x-raw-rgb", NULL))

然后在拉缓冲区的时候:

gstImageBuffer = gst_app_sink_pull_buffer((GstAppSink*)app_data.gst_data.sink);
matLeft = Mat(Size(width, height), CV_8UC3, (char*)GST_BUFFER_DATA(gstImageBuffer));
cvtColor(matLeft, matLeft, CV_RGB2BGR);