用OpenCV捕获H264stream

用OpenCV捕获H264stream,第1张

概述用OpenCV捕获H264stream

所以。 我一直试图让我的树莓派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所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1280433.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-09
下一篇 2022-06-09

发表评论

登录后才能评论

评论列表(0条)

保存