首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从网络摄像头到设备驱动程序,输出8位灰度

从网络摄像头到设备驱动程序,输出8位灰度
EN

Unix & Linux用户
提问于 2013-08-07 16:06:36
回答 1查看 3.1K关注 0票数 2

使用下面的命令,我试图捕获10 and并将设备驱动程序发送给它们。现在,我希望将8位灰色原始帧(每帧640x480= 307200字节)发送到设备驱动程序。我不知道如何用ffmpeg或inputwithv4l2将输出设置为这种格式。

代码语言:javascript
复制
ffmpeg -f v4l2 -r 25 -s 640x480 -i /dev/video0 -f rawvideo "/dev/devicedriver"

ffmpeg似乎不支持8位灰色输出。使用v4l2,我不知道如何设置它。它似乎没有对V4L2_PIX_FMT_GREY进行重新定位。

代码语言:javascript
复制
v4l2-ctl --set-fmt-video-out=width=640,height=480,pixelformat=V4L2_PIX_FMT_GREY

我想出了一个结合python、opencv和ffmpeg的解决方案:

代码语言:javascript
复制
import cv
import sys
import os
import time
camera_index = 0 
capture = cv.CaptureFromCAM(camera_index)
count = 0
def repeat():
    global capture
    global camera_index
    global count
    frame = cv.GetMat(cv.QueryFrame(capture))
    framegray = cv.CreateMat(480, 640, cv.CV_8UC1)
    cv.CvtColor(frame, framegray, cv.CV_BGR2GRAY)
    sys.stdout.write(framegray.tostring())
    c = cv.WaitKey(1)
    if c == 27:
        print count
        sys.exit()

while True:
    repeat()

然后把它吹到

代码语言:javascript
复制
python capturewebcam.py | ffmpeg -f rawvideo -pix_fmt gray -s 640x480 -i - -an -f rawvideo -r 10 "/dev/null"

但我认为,这真的必须是可能的,只有ffmpeg和v4l2,我不知道如何。我的头因阅读文件而感到头痛。

EN

回答 1

Unix & Linux用户

回答已采纳

发布于 2013-08-11 00:28:28

首先,输出设备驱动程序支持检查像素格式:

代码语言:javascript
复制
v4l2-ctl --list-formats -d /dev/devicedriver

要传递给v4l2-ctl命令行的像素格式是结果中显示的四in,例如:

代码语言:javascript
复制
Pixel Format  : 'YUYV'

在这种情况下,命令行是:

代码语言:javascript
复制
v4l2-ctl --set-fmt-video-out=width=640,height=480,pixelformat=YUYV

如果您需要V4L2_PIX_FMT_GREY,那么该4‘t可能是“灰色”(我猜从视频dev2.h开始,无法检查)

如果没有列表格式命令的结果,驱动程序就不支持它,因此需要将源(输入/摄像机)格式转换为输出。

票数 1
EN
页面原文内容由Unix & Linux提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://unix.stackexchange.com/questions/85849

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档