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
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 零经验选手,Compose 一天开发一款小游戏!
· 通过 API 将Deepseek响应流式内容输出到前端
· 因为Apifox不支持离线,我果断选择了Apipost!