#include <linux/videodev2.h>
1. 打开设备
int fd = open("/dev/video0", O_RDWR);
2. 查询设备属性
struct v4l2_capability cap;
ioctl(fd, VIDIOC_QUERYCAP, &cap);
3. 设置图像帧格式和像素大小
struct v4l2_format fmt;
fmt.type = V4L2_BUF_TYPE_VIDEO_CAPTURE;
fmt.fmt.pix.width = 640;
fmt.fmt.pix.height = 480;
fmt.fmt.pix.pixelformat = V4L2_PIX_FMT_JPEG; 使用JPEG格式帧,用于静态图像采集
ioctl(fd, VIDIOC_S_FMT, &fmt);
4. 读取一帧JPEG图像并写入文件
void *buff = malloc(1024 * 1024); 分配缓存足以容纳一帧图像
size = read(fd, buff, 1024 * 1024);
int filefd = open("./capture.jpg", O_RDWR | O_CREAT);
write(filefd, buff, size);
网上读取图像帧示例大多用mmap方式,但对于只读取几张静态图像而言,read方式足以。
句柄close的事儿就不累述了。