所以。 我一直试图让我的树莓派2从我的罗技C920用OpenCV捕获H264stream很长一段时间。 我一直在清理networking的信息,但没有运气。
简短的系统描述:
树莓派2,运行Raspbian,内核3.18
罗技HD Pronetworking摄像头c920
OpenCV 2.4.11
boneCV – 积分Derek Molloy( https://github.com/derekmolloy/boneCV )
libx264和FFMPEG(使用x264支持)
libv4l-dev,v4l-utils,qv4l2,v4l2ucp
我知道OpenCV强制格式为BGR24(MJPG)。 这在cap_libv4l.cpp中指定。 看起来像这样(692->):
/* libv4l will convert from any format to V4L2_PIX_FMT_BGR24 */ CLEAR (capture->form); capture->form.type = V4L2_BUF_TYPE_VIDEO_CAPTURE; capture->form.fmt.pix.pixelformat = V4L2_PIX_FMT_BGR24; capture->form.fmt.pix.fIEld = V4L2_FIELD_ANY; capture->form.fmt.pix.wIDth = capture->wIDth; capture->form.fmt.pix.height = capture->height;
我可以用v4l2-ctl –set-fmt-vIDeo设置像素格式
键盘钩子 – 不同的语言 – c ++
COM对象DLL负载问题
为不同进程的窗口设置父窗口是否正确?
如何检测windows 8 *** 作系统使用C#4.0?
如何在C#中使用windows服务调用windows应用程序?
pi@raspBerrypi ~/boneCV$ v4l2-ctl --set-fmt-vIDeo=wIDth=1920,height=1080,pixelformat=H264 pi@raspBerrypi ~/boneCV$ v4l2-ctl --get-fmt-vIDeo Format VIDeo Capture: WIDth/Height : 1920/1080 Pixel Format : 'H264' FIEld : None Bytes per line: 3840 Size Image : 4147200 Colotspace : SRGB
如果我现在运行“./boneCV” – 一个非常简单的捕获程序捕获图片,并进行canny边缘检测。 (我将在最后添加代码)。 我得到这个:
pi@raspBerrypi ~/boneCV$ ./boneCV pi@raspBerrypi ~/boneCV$ v4l2-ctl --get-fmt-vIDeo Format VIDeo Capture: WIDth/Height : 1920/1080 Pixel Format : 'MJPG' FIEld : None Bytes per line: 0 Size Image : 4147200 colorspace : SRGB
正如你可以看到“像素格式”和“每行字节数”的变化。 “字段”停留在“无”,“彩色空间”停留在SRGB。 然后我尝试用cap_lib4vl.cpp中的“V4L2_PIX_FMT_H264”replace每个“V4L2_PIX_FMT_BGR24”,并重新构buildOpenCV。 当我运行“./boneCV”时,我的两个.png图像只有一个或两个白色条纹的黑色。
要找出它是libv4l还是OpenCV,我运行了Derek Molloys boneCV之后的“./capture”脚本。 它直接使用libv4l并捕获H264vIDeostream,完全没有问题。 然后我必须使用“./raw2mpg4”才能观看它。 .mp4文件是在30 fps的1920×1080没有毛刺。 在此之后,我再次检查了“v4l2-ctl –get-fmt-vIDeo”,并得到了以下结果:
pi@raspBerrypi ~/boneCV$ v4l2-ctl --get-fmt-vIDeo Format VIDeo Capture: WIDth/Height : 1920/1080 Pixel Format : 'H264' FIEld : None Bytes per line: 3840 Size Image : 4147200 Colotspace : SRGB
完全一样,当我设置一切manualy。
我得出的结论是,如果我希望OpenCV能够捕获原始的H264stream,我将不得不改变cap_libv4l.cpp,但我不知道如何。 我认为这可能是因为每帧和/或色彩空间的比特差异。 有谁知道如何做到这一点或如何做一个解决方法,以便我仍然可以使用OpenCV的“vIDeo捕捉”function?
我知道很多树莓派和BeagleboneBlack用户将永远如此gratefull如果有任何解决这个问题。 我试图覆盖所有我认为相关的东西,如果还有更多的东西可以提供给我们更好的画面,请说出来。
她提到了一些提到的脚本和程序的链接:(编辑,我试图发布链接到每个程序,但是我没有足够的声望,去Derek Molloys的github页面,你会发现boneCV在那里。
不,我不能使用“CV_FOURCC('H','2','6','4');” 因为这个function还没有为linux实现。
没有显示MFC的cmenu工具提示
C:dynamic链接到OpenSSL库时出错
为什么我的剪贴板侦听器被调用两次/应用程序打开两次?
检测显示器上的10位颜色支持
在linux中为C ++编程资源
总结以上是内存溢出为你收集整理的用OpenCV捕获H264stream全部内容,希望文章能够帮你解决用OpenCV捕获H264stream所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)