如何使用C++,并将其保存到磁盘捕获与我的摄像头的图像?由于硬件问题,我无法使用OPENCV。 该USB摄像头确实与其他程序,如mplayer,奶酪,gpicview,ffmpeg等工作的USB摄像头图像采集,恕不的OpenCV(LINUX)
我听说V4L能够做到这一点,但它有任何C++库吗? 任何人都可以告诉我一个关于如何做到这一点的C++示例?
如何使用C++,并将其保存到磁盘捕获与我的摄像头的图像?由于硬件问题,我无法使用OPENCV。 该USB摄像头确实与其他程序,如mplayer,奶酪,gpicview,ffmpeg等工作的USB摄像头图像采集,恕不的OpenCV(LINUX)
我听说V4L能够做到这一点,但它有任何C++库吗? 任何人都可以告诉我一个关于如何做到这一点的C++示例?
这是很容易的,你可以在videodevice做read
,您已经激活了一些读写控制后,让你的控制之下的凸轮。
你可以用用v412这项工作。您在这些步骤做:
下面是我用这个作业的执行情况。它会将相机设置为以320x240像素捕捉视频,但您可以读取分辨率,相机可以从v4l2_capability
结构中获得。
而且我没有测试过不同的相机比我的PS2 EyeToy的代码,但它主要是从名为qv4l2(你可以从here得到它)的一个样本程序作出。该计划应解决您通常在那里看到的所有其他问题。
#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>
#include <string.h>
#include <fcntl.h> /* low-level i/o */
#include <errno.h>
#include <sys/stat.h>
#include <sys/types.h>
#include <sys/time.h>
#include <sys/ioctl.h>
#include <linux/videodev2.h>
static int xioctl(int fh, int request, void *arg)
{
int r;
do {
r = ioctl(fh, request, arg);
} while (-1 == r && EINTR == errno);
return r;
}
int allocCamera(const char* file)
{
struct v4l2_capability cap;
struct v4l2_crop crop;
struct v4l2_format fmt;
int camera_fd = open(file, O_RDONLY);
if (-1 == xioctl (camera_fd, VIDIOC_QUERYCAP, &cap)) {
if (EINVAL == errno) {
fprintf (stderr, "%s is no V4L2 device\n", file);
exit (EXIT_FAILURE);
} else {
printf("\nError in ioctl VIDIOC_QUERYCAP\n\n");
exit(0);
}
}
if (!(cap.capabilities & V4L2_CAP_VIDEO_CAPTURE)) {
fprintf (stderr, "%s is no video capture device\n", file);
exit (EXIT_FAILURE);
}
if (!(cap.capabilities & V4L2_CAP_READWRITE)) {
fprintf (stderr, "%s does not support read i/o\n", file);
exit (EXIT_FAILURE);
}
memset(&fmt, 0, sizeof(fmt));
fmt.type = V4L2_BUF_TYPE_VIDEO_CAPTURE;
fmt.fmt.pix.width = 320;
fmt.fmt.pix.height = 240;
fmt.fmt.pix.pixelformat = V4L2_PIX_FMT_YUYV;
fmt.fmt.pix.field = V4L2_FIELD_INTERLACED;
if (-1 == xioctl(camera_fd, VIDIOC_S_FMT, &fmt)) {
printf("VIDIOC_S_FMT");
}
return camera_fd;
}
谢谢你的详细回复,我会试试这个。 – Prem 2013-02-22 20:15:23
欢迎堆栈溢出! StackOverflow不是这个问题的适当位置。我们不会为您编写代码。你需要做自己的编码,如果你不确定为什么某些东西不能按预期工作,请在代码中加上一个解释你期望它做什么,以及它实际上在做什么,包括所有的错误信息。参见[关于StackOverflow](http://stackoverflow.com/about)。 – 2013-02-22 20:19:54