Leo手把手教你C语言使用libuvc对USB摄像头进行开发

该文详细介绍了如何利用开源库libuvc和libusb在C语言环境中安装、配置,并进行跨平台的USB摄像头开发。通过编写Makefile和封装libuvc接口,可以实现与摄像头的通讯,包括初始化、释放、启动设备,以及YUYV到RGB的帧格式转换。文中还提供了示例代码展示如何同时操作两个摄像头。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

市面上的所谓免驱USB摄像头实际就是服从了统一输出流协议(UVC)的设备。所以只要掌握如何使用UVC协议和USB摄像头进行通讯,就能对USB摄像头进行开发了。著名的开源项目LIBUVC就是分装了C语言接口方便跨平台调用libuvc的库来和USB设备进行通讯。

1. 安装libuvc以及依赖库libusb

git clone https://github.com/libusb/libusb.git
cd libusb
./configure  --disable-udev 
make
make install

 

git clone https://github.com/libuvc/libuvc.git
cd libuvc
mkdir -p build/
cd build
cmake ..
make 
make install

 2. (可选)将库编译出并放置在一个文件夹中用以区分版本

THIRDPARTY_FOLDER=${PWD}
sudo apt-get install libudev-dev -y
cd ${THIRDPARTY_FOLDER}/libusb
sh bootstrap.sh
./configure  --disable-udev 
make


cd ${THIRDPARTY_FOLDER}/libuvc
mkdir -p build/
cd build
cmake ..
make 

mkdir -p ${THIRDPARTY_FOLDER}/libs/
mkdir -p ${THIRDPARTY_FOLDER}/libs/linux/
cp -f ${THIRDPARTY_FOLDER}/libusb/libusb/.libs/libusb-1.0.a ${THIRDPARTY_FOLDER}/libs/linux/
cp -f ${THIRDPARTY_FOLDER}/libuvc/build/libuvc.a ${THIRDPARTY_FOLDER}/libs/linux/
cp -r ${THIRDPARTY_FOLDER}/libuvc/include/libuvc  ${THIRDPARTY_FOLDER}/libs/linux/
cp -r ${THIRDPARTY_FOLDER}/libuvc/build/include/libuvc/libuvc_config.h  ${THIRDPARTY_FOLDER}/libs/linux/libuvc/

3. 写Makefile调用libuvc和libusb-1.0

cc:=g++
THIRD_PATY_LIBS_PATH:=$(PWD)/../../thirdParty/libs/linux
ccflag:=-w -O3 -fpermissive -luvc -lusb-1.0 -L$(THIRD_PATY_LIBS_PATH)/. -I$(THIRD_PATY_LIBS_PATH)/
ccflag+=-lGL -lGLU -lglut -w -O3
# src:=./leouvc.c
src_demo:=./leouvc.c ./leouvcDemo.c
src_demo_gl:=./leouvc.c ./leouvcDemoGL.c
exe_demo:=./leouvcDemo
exe_demoGL:=./leouvcDemoGL
build:
		$(cc) $(src_d
VidCap所有函数具体说明请参阅csVidCap.h。 一、 预览/录象流程 1、 初始化并获取当前系统活动的摄像头数量;VidCapInit 2、 连接并打开指定的摄像头;VidCapConnect 3、 设定摄像头输出分辨率和图象格式;VidCapSetFormat 4、 启动摄像头,并传入回调函数地址;VidCapStart 5、 摄像头开始工作,获得数据后调用回调函数通知应用程序;VidCapCallbackProc 6、 停止摄像头;VidCapStop 7、 关闭摄像头;VidCapDisconnect 8、 释放资源。VidCapUninit 二、 拍照流程 1、 初始化并获取当前系统活动的摄像头数量;VidCapInit 2、 连接并打开指定的摄像头;VidCapConnect 3、 设定摄像头输出分辨率和图象格式;VidCapSetFormat 4、 启动摄像头,并传入静态图片回调函数地址;VidCapStart 5、 摄像头开始工作; 6、 用户按下摄像头上拍照按钮或应用程序调用拍照函数;VidCapTakeStillPicture 7、 摄像头拍照并调用静态图片回调函数通知应用程序;VidCapCallbackProc 8、 停止摄像头;VidCapStop 9、 关闭摄像头;VidCapDisconnect 10、 释放资源。VidCapUninit 三、 摄像头分辨率和输出格式 1、 获取当前摄像头所支持的分辨率和输出格式数量;VidCapGetNumberOfCapabilities 2、 遍历每个支持的分辨率和格式的详细信息;VidCapGetStreamCaps 3、 选择并设定当前所需的分辨率和输出格式。VidCapSetFormat 四、 摄像头控制 1、 获取控制参数的范围和默认值;VidCapGetRange 2、 获取控制参数的当前设定值;VidCapGet 3、 设定控制参数新值。VidCapSet
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值