• 大小: 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


评论

共有 条评论

相关资源