-
大小: 658KB文件類型: .rar金幣: 2下載: 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
評論
共有 條評論