我使用Nitrogen6x板和ov5640相机(mipi)。
相机未使用标准v4l / v4l,但我们可以使用GStreamer为其驱动程序(mfw_v4l)流式传输视频:
gst-launch mfw_v4lsrc ! autovideosink
我想通过GStreamer(OpenCV内的GStreamer)调用OpenCV中的相机。 我问了一个关于在OpenCV here中调用GStreamer的问题,这是后续的。
如果我启用了GStreamer支持,则会检查in the source code,但OpenCV会尝试将标准V4L / V4L2用于我想要更改的GStreamer。 有关调用GStreamer的部分位于cap_gstreamer.cpp:
CvCapture* cvCreateCapture_GStreamer(int type, const char* filename )
{
CvCapture_GStreamer* capture = new CvCapture_GStreamer;
if( capture->open( type, filename ))
return capture;
delete capture;
return 0;
}
我想这是我应该以某种方式指向相机驱动程序的部分。 ("类型"这里可能是一个与驱动程序相关的数字(在precomp.hpp中定义),但"文件名"?)
有关如何通过GStreamer访问相机的任何建议都会有所帮助和赞赏。 谢谢!
答案 0 :(得分:5)
看起来我们可以使用正确的GStreamer管道调用相机,如下所示:
VideoCapture cap("mfw_v4lsrc ! ffmpegcolorspace ! video/x-raw-rgb ! appsink")
由于相机输出为YUV,我们需要将其转换为RGB以将帧传递给OpenCV。 This是OpenCV确保它获得RGB色彩空间的地方。
答案 1 :(得分:1)
仅供参考,这适用于OpenCV 3.0:
toolStripMenuItem1.Tag = "http://www.google.com";
toolStripMenuItem2.Tag = "http://www.bing.com";
toolStripMenuItem3.Tag = "http://www.duckduckgo.com";
toolStripMenuItem4.Tag = "http://www.yahoo.com";
...
private void toolStripMenuItem_Click(object sender, EventArgs e)
{
Process.Start(sender.Tag.ToString());
}