java h264 截屏_使用OpenCV捕获H264流

博主在尝试使用Raspberry Pi 2和OpenCV从Logitech C920摄像头捕获H264流,但OpenCV默认强制转换为BGR24格式。通过libv4l可以手动设置pixelformat为H264,然而,当尝试修改OpenCV源代码以支持H264时,捕获的图像只显示为黑色。对比使用libv4l的boneCV脚本,该脚本能成功捕获H264流。博主寻求如何使OpenCV的VideoCapture功能支持H264流或者可行的替代方案。
摘要由CSDN通过智能技术生成

所以 . 我一直试图让我的Raspberry Pi 2用我的Logitech C920用OpenCV捕获H264流已经有一段时间了 . 我一直在搜索互联网信息,但没有运气 .

一个简短的系统描述:

Raspberry Pi 2,运行Raspbian,内核3.18

罗技HD Pro网络摄像头c920

OpenCV 2.4.11

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手动设置pixelformat

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” - 一个非常简单的捕获程序,捕获图片并进行精确的边缘检测 . (我最后会添加代码) . 我明白了:

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

您可以选择“Pixelformat”和“每行字节数”更改 . “Field”保持为None,“Colourspace”保持在SRGB . 然后我尝试将每个“V4L2_PIX_FMT_BGR24”替换为cap_lib4vl.cpp中的“V4L2_PIX_FMT_H264”并重新构建OpenCV . 当我运行“./boneCV”时,我的两个.png图像只有黑色,带有一条或两条白色条纹 .

为了确定它是libv4l还是OpenCV,我运行了跟随Derek Molloys boneCV的“./capture”脚本 . 它直接使用libv4l并捕获H264视频流,完全没有问题 . 然后我必须使用“./raw2mpg4”才能观看它 . .mp4文件是1920x1080,30 fps,没有毛刺 . 在此之后我再次检查了“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能够捕获原始H264流,我将不得不更改cap_libv4l.cpp,但我不知道如何 . 我想这可能是因为每帧和/或颜色空间的比特差异 . Do anybody know how to do this or how to make an workaround so that I stil can use OpenCVs "VideoCapture" function?

我知道很多Raspberry Pi和BeagleboneBlack的用户如果对这个问题有任何解决方案会非常感激 . 我试图涵盖我认为相关的所有内容,如果我能提供更多的东西来更好地描绘图片,请说出来 .

她与上述脚本和程序的一些链接: (edit. I tried to post the links to each of the programs, but I didn't have enough reputation. Go to Derek Molloys github page and you'll find boneCV there.)

不,我不能使用“CV_FOURCC('H','2','6','4');”因为这个功能还没有为linux实现 .

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值