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。
答案 0 :(得分:1)
最后借助这篇文章Changing cv::Mat with image copied from buffer affects original image,我可以将缓冲区拉出来。现在缓冲区的大小有意义,640 * 360 * 3.
我必须以不同的方式链接appink和ffmpegcolorspace元素:
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);