Linux 下gocv 读取USB摄像头,使用MJPG

gocv 默认应该是YUV, YUV是原始数据,相对MJPEG表示图片,数据量比较大,所以占用带宽就很大,会出现视频不流畅情况

所以需要显示指定使用MJPEG,相对YUV会流畅很多,首先需要查看当前有几个视频设备:

ls /dev/video*
/dev/video0  /dev/video1

我当前只插了一个USB,但是会有两个video,暂时不知道为什么...  O-O,当前我需要使用video0(通过video0,video1逐个试出来的...)

复制代码
//"gocv.io/x/gocv"
var webcam *gocv.VideoCapture
var win *gocv.Window
func main()  {
    webcam, _ := gocv.VideoCaptureDevice(0)//0: video索引
    webcam.Set(gocv.VideoCaptureFOURCC, webcam.ToCodec("MJPG"))//指定MJPEG方式
    webcam.Set(gocv.VideoCaptureFrameWidth, 1920)//宽
    webcam.Set(gocv.VideoCaptureFrameHeight, 960)//高
    win = gocv.NewWindow("")//创建window窗口
    for {
        imgMat := gocv.NewMat()
        webcam.Read(&imgMat)//读取一张图片到imgMat
        win.IMShow(imgMat)//展示图片
        win.WaitKey(1)//展示1毫秒立即关闭
    }
}
复制代码

注: 宽高要符合摄像头支持宽高,可以通过v4l2-ctl --all查看默认宽高和一些其他信息

复制代码
v4l2-ctl --all
Driver Info:
    Driver name      : uvcvideo
    Card type        : HJ_800W: HJ_800W
    Bus info         : usb-0000:00:1a.7-1
    Driver version   : 5.8.18
    Capabilities     : 0x84a00001
        Video Capture
        Metadata Capture
        Streaming
        Extended Pix Format
        Device Capabilities
    Device Caps      : 0x04200001
        Video Capture
        Streaming
        Extended Pix Format
Priority: 2
Video input : 0 (Camera 1: ok)
Format Video Capture:
    Width/Height      : 1920/1080
    Pixel Format      : 'MJPG' (Motion-JPEG)
    Field             : None
    Bytes per Line    : 0
    Size Image        : 4147200
    Colorspace        : sRGB
    Transfer Function : Default (maps to sRGB)
    YCbCr/HSV Encoding: Default (maps to ITU-R 601)
    Quantization      : Default (maps to Full Range)
    Flags             : 
Crop Capability Video Capture:
    Bounds      : Left 0, Top 0, Width 1920, Height 1080
    Default     : Left 0, Top 0, Width 1920, Height 1080
    Pixel Aspect: 1/1
Selection Video Capture: crop_default, Left 0, Top 0, Width 1920, Height 1080, Flags: 
Selection Video Capture: crop_bounds, Left 0, Top 0, Width 1920, Height 1080, Flags: 
Streaming Parameters Video Capture:
    Capabilities     : timeperframe
    Frames per second: 30.000 (30/1)
    Read buffers     : 0
                     brightness 0x00980900 (int)    : min=0 max=127 step=1 default=0 value=0
                       contrast 0x00980901 (int)    : min=0 max=95 step=1 default=4 value=4
                     saturation 0x00980902 (int)    : min=0 max=255 step=1 default=100 value=100
                            hue 0x00980903 (int)    : min=-2000 max=2000 step=1 default=0 value=0
 white_balance_temperature_auto 0x0098090c (bool)   : default=1 value=1
                          gamma 0x00980910 (int)    : min=80 max=300 step=1 default=115 value=115
           power_line_frequency 0x00980918 (menu)   : min=0 max=2 default=1 value=1
                0: Disabled
                1: 50 Hz
                2: 60 Hz
      white_balance_temperature 0x0098091a (int)    : min=2806 max=6500 step=1 default=4600 value=4600 flags=inactive
                      sharpness 0x0098091b (int)    : min=0 max=100 step=1 default=0 value=0
         backlight_compensation 0x0098091c (int)    : min=0 max=1 step=1 default=0 value=0
                  exposure_auto 0x009a0901 (menu)   : min=0 max=3 default=3 value=3
                1: Manual Mode
                3: Aperture Priority Mode
              exposure_absolute 0x009a0902 (int)    : min=1 max=10000 step=1 default=156 value=156 flags=inactive
                 focus_absolute 0x009a090a (int)    : min=0 max=100 step=1 default=5 value=5 flags=inactive
                     focus_auto 0x009a090c (bool)   : default=1 value=1
复制代码

 

posted @   耿明岩  阅读(1435)  评论(0编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
阅读排行:
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 零经验选手,Compose 一天开发一款小游戏!
· 通过 API 将Deepseek响应流式内容输出到前端
· 因为Apifox不支持离线,我果断选择了Apipost!
希望能帮助到你,顺利解决问题! ...G(^_−)☆
点击右上角即可分享
微信分享提示