-
大小: 658KB文件类型: .rar金币: 1下载: 0 次发布日期: 2021-06-02
- 语言: 其他
- 标签:
资源简介
嵌入式平台s3c2440 ARm9使用V4L2格式摄像头抓帧,yuv转bmp操作,并保存为bmp图片,抓帧后保存rgb并且写BMP格式头和RGB数据。
代码片段和文件信息
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
char formats[5][16] = {0};
struct v4l2_fmtdesc fmtdesc;//获取摄像的格式
struct v4l2_format fmt;//更详细的获得摄像中的图片的具体信息
struct v4l2_capability cap;//获取它摄像的功能
// 获取摄像头格式信息(固定)
void get_caminfo(int camfd)
{
fmtdesc.index = 0;
fmtdesc.type = V4L2_BUF_TYPE_VIDEO_CAPTURE;
int ret;
printf(“像素格式: \n“);
while((ret=ioctl(camfd VIDIOC_ENUM_FMT &fmtdesc)) == 0)
{
printf(“[%d]“ fmtdesc.index);
sprintf(formats[fmtdesc.index]+0 “%c“ (fmtdesc.pixelformat>>8*0)&0xFF);
sprintf(formats[fmtdesc.index]+1 “%c“ (fmtdesc.pixelformat>>8*1)&0xFF);
sprintf(formats[fmtdesc.index]+2 “%c“ (fmtdesc.pixelformat>>8*2)&0xFF);
sprintf(formats[fmtdesc.index]+3 “%c“ (fmtdesc.pixelformat>>8*3)&0xFF);
printf(“\“%s\““ formats[fmtdesc.index]);
printf(“(详细描述: %s)\n“ fmtdesc.description);
fmtdesc.index++;
}
}
// 获取摄像头格式信息(可调)
void get_camfmt(int camfd)
{
bzero(&fmt sizeof(fmt));
fmt.type = V4L2_BUF_TYPE_VIDEO_CAPTURE;
if(ioctl(camfd VIDIOC_G_FMT &fmt) == -1)
{
printf(“获取摄像头格式信息失败: %s\n“ strerror(errno));
exit(0);
}
printf(“分辨率: %d×%d\n“ fmt.fmt.pix.width fmt.fmt.pix.height);
printf(“像素格式: “);
switch(fmt.fmt.pix.pixelformat)
{
case V4L2_PIX_FMT_MJPEG:
printf(“V4L2_PIX_FMT_MJPEG\n“);
break;
case V4L2_PIX_FMT_JPEG:
printf(“V4L2_PIX_FMT_JPEG\n“);
break;
case V4L2_PIX_FMT_MPEG:
printf(“V4L2_PIX_FMT_MPEG\n“);
break;
case V4L2_PIX_FMT_MPEG1:
printf(“V4L2_PIX_FMT_MPEG1\n“);
break;
case V4L2_PIX_FMT_MPEG2:
printf(“V4L2_PIX_FMT_MPEG2\n“);
break;
case V4L2_PIX_FMT_MPEG4:
printf(“V4L2_PIX_FMT_MPEG4\n“);
break;
case V4L2_PIX_FMT_H264:
printf(“V4L2_PIX_FMT_H264\n“);
break;
case V4L2_PIX_FMT_XVID:
printf(“V4L2_PIX_FMT_XVID\n“);
break;
case V4L2_PIX_FMT_RGB24:
printf(“V4L2_PIX_FMT_RGB24\n“);
break;
case V4L2_PIX_FMT_BGR24:
printf(“V4L2_PIX_FMT_BGR24\n“);
break;
case V4L2_PIX_FMT_YUYV:
printf(“V4L2_PIX_FMT_YUYV\n“);
break;
case V4L2_PIX_FMT_YYUV:
printf(“V4L2_PIX_FMT_YYUV\n“);
break;
case V4L2_PIX_FMT_YVYU:
printf(“V4L2_PIX_FMT_YVYU\n“);
break;
case V4L2_PIX_FMT_YUV444:
printf(“V4L2_PIX_FMT_YUV444\n“);
break;
case V4L2_PIX_FMT_YUV410:
printf(“V4L2_PIX_FMT_YUV410\n“);
break;
case V4L2_PIX_FMT_YUV420:
printf(“V4L2_PIX_FMT_YUV420\n“);
break;
case V4L2_PIX_FMT_YVU420:
printf(“V4L2_PIX_FMT_YVU420\n“);
break;
case V4L2_PIX_FMT_YUV422P:
printf(“V4L2_PIX_FMT_YUV422P\n“);
break;
default:
printf(“未知\n“);
}
}
// 获取摄像头设备的基本参数
void get_camcap(int camfd)
{
bzero(&cap sizeof(cap));
if(ioctl(camfd VIDIOC_QUERYCAP &cap) == -1)
{
printf(“获取摄像头基
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
文件 921654 2018-06-20 17:28 摄像头抓帧保持至bmp图片\8.bmp
文件 921654 2018-06-20 17:27 摄像头抓帧保持至bmp图片\9.bmp
文件 4836 2018-06-20 17:28 摄像头抓帧保持至bmp图片\caminfo.c
文件 1827 2018-06-20 17:23 摄像头抓帧保持至bmp图片\head.h
文件 16348 2018-06-20 17:26 摄像头抓帧保持至bmp图片\test
文件 8557 2019-03-02 17:56 摄像头抓帧保持至bmp图片\video.c
目录 0 2019-03-02 17:53 摄像头抓帧保持至bmp图片
----------- --------- ---------- ----- ----
1874876 7
评论
共有 条评论