Linux下使用V4L2讀取獲取拍照(獲取靜態影象)
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的事兒就不累述了。