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和openv -2.4.10。
最后,在这篇文章的帮助下,改变cv::Mat与从缓冲区复制的图像影响原始图像,我可以拉出缓冲区的颜色。现在缓冲区的大小是有意义的,640*360*3。
我必须以不同的方式链接appsink与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);