linux arm64 opencv 使用MJPG获取摄像头图片

先上代码

#include <opencv2/opencv.hpp>cv::VideoCapture capture(9, cv::CAP_V4L2);if (!capture.isOpened()){qDebug() << "打开摄像头失败";return  -1;}if(1){// 设置为 'MJPG' (Motion-JPEG, compressed)qDebug() << "MJPEG:" << cv::VideoWriter::fourcc('M','J','P','G');qDebug() << "get CAP_PROP_FOURCC:" << (int)capture.get(cv::CAP_PROP_FOURCC);qDebug() << "set CAP_PROP_FOURCC:" << capture.set(cv::CAP_PROP_FOURCC, cv::VideoWriter::fourcc('M','J','P','G'));qDebug() << "get CAP_PROP_FOURCC:" << (int)capture.get(cv::CAP_PROP_FOURCC);}if(0){// 设置为 'YUYV' (YUYV 4:2:2)qDebug() << "YUYV:" << cv::VideoWriter::fourcc('Y', 'U', 'Y', '2');qDebug() << "get CAP_PROP_FOURCC:" << (int)capture.get(cv::CAP_PROP_FOURCC);qDebug() << "set CAP_PROP_FOURCC:" << capture.set(cv::CAP_PROP_FOURCC, cv::VideoWriter::fourcc('Y', 'U', 'Y', '2'));qDebug() << "get CAP_PROP_FOURCC:" << (int)capture.get(cv::CAP_PROP_FOURCC);}// Set frame widthcapture.set(cv::CAP_PROP_FRAME_WIDTH, 1920);// Set frame heightcapture.set(cv::CAP_PROP_FRAME_HEIGHT, 1080);// Set FPSqDebug() << "set CAP_PROP_FPS:" << capture.set(cv::CAP_PROP_FPS, 25);cv::Mat imgFrame;capture >> imgFrame;//capture.read(imgFrame);//capture.grab(); capture.retrieve(imgFrame, 0); // retrieve需要调用grabqDebug() << "image save:" << cv::imwrite("/root/uvc.jpg", imgFrame);cv::imshow("img", imgFrame);//cv::waitKey(0);capture.release();

cv::VideoCapture capture(9, cv::CAP_V4L2)第二个参数apiPreference比较重要,默认值为cv::CAP_ANY,部分板子使用默认值是无法配置MJPG的,只能使用YUYV格式,默认值估计是cv::CAP_GSTREAMER

  • cv::CAP_GSTREAMER 调用capture.set都会返回false, 不能使用'MJPG' (Motion-JPEG, compressed),只支持'YUYV' (YUYV 4:2:2), 帧率设置不对就会无法读取图像
  • cv::CAP_V4L2 调用capture.set都会返回true,帧率设置错误也能读取图像

cv::VideoWriter::fourcc('M','J','P','G')中参数值可以参考(CAP_PROP_CODEC_PIXEL_FORMAT后面注释写的):https://github.com/FFmpeg/FFmpeg/blob/master/libavcodec/raw.c

这里列一下:

static const PixelFormatTag raw_pix_fmt_tags[] = {{ AV_PIX_FMT_YUV420P, MKTAG('I', '4', '2', '0') }, /* Planar formats */{ AV_PIX_FMT_YUV420P, MKTAG('I', 'Y', 'U', 'V') },{ AV_PIX_FMT_YUV420P, MKTAG('y', 'v', '1', '2') },{ AV_PIX_FMT_YUV420P, MKTAG('Y', 'V', '1', '2') },{ AV_PIX_FMT_YUV410P, MKTAG('Y', 'U', 'V', '9') },{ AV_PIX_FMT_YUV410P, MKTAG('Y', 'V', 'U', '9') },{ AV_PIX_FMT_YUV411P, MKTAG('Y', '4', '1', 'B') },{ AV_PIX_FMT_YUV422P, MKTAG('Y', '4', '2', 'B') },{ AV_PIX_FMT_YUV422P, MKTAG('P', '4', '2', '2') },{ AV_PIX_FMT_YUV422P, MKTAG('Y', 'V', '1', '6') },/* yuvjXXX formats are deprecated hacks specific to libav*,they are identical to yuvXXX  */{ AV_PIX_FMT_YUVJ420P, MKTAG('I', '4', '2', '0') }, /* Planar formats */{ AV_PIX_FMT_YUVJ420P, MKTAG('I', 'Y', 'U', 'V') },{ AV_PIX_FMT_YUVJ420P, MKTAG('Y', 'V', '1', '2') },{ AV_PIX_FMT_YUVJ422P, MKTAG('Y', '4', '2', 'B') },{ AV_PIX_FMT_YUVJ422P, MKTAG('P', '4', '2', '2') },{ AV_PIX_FMT_GRAY8,    MKTAG('Y', '8', '0', '0') },{ AV_PIX_FMT_GRAY8,    MKTAG('Y', '8', ' ', ' ') },{ AV_PIX_FMT_YUYV422, MKTAG('Y', 'U', 'Y', '2') }, /* Packed formats */{ AV_PIX_FMT_YUYV422, MKTAG('Y', '4', '2', '2') },{ AV_PIX_FMT_YUYV422, MKTAG('V', '4', '2', '2') },{ AV_PIX_FMT_YUYV422, MKTAG('V', 'Y', 'U', 'Y') },{ AV_PIX_FMT_YUYV422, MKTAG('Y', 'U', 'N', 'V') },{ AV_PIX_FMT_YUYV422, MKTAG('Y', 'U', 'Y', 'V') },{ AV_PIX_FMT_YVYU422, MKTAG('Y', 'V', 'Y', 'U') }, /* Philips */{ AV_PIX_FMT_UYVY422, MKTAG('U', 'Y', 'V', 'Y') },{ AV_PIX_FMT_UYVY422, MKTAG('H', 'D', 'Y', 'C') },{ AV_PIX_FMT_UYVY422, MKTAG('U', 'Y', 'N', 'V') },{ AV_PIX_FMT_UYVY422, MKTAG('U', 'Y', 'N', 'Y') },{ AV_PIX_FMT_UYVY422, MKTAG('u', 'y', 'v', '1') },{ AV_PIX_FMT_UYVY422, MKTAG('2', 'V', 'u', '1') },{ AV_PIX_FMT_UYVY422, MKTAG('A', 'V', 'R', 'n') }, /* Avid AVI Codec 1:1 */{ AV_PIX_FMT_UYVY422, MKTAG('A', 'V', '1', 'x') }, /* Avid 1:1x */{ AV_PIX_FMT_UYVY422, MKTAG('A', 'V', 'u', 'p') },{ AV_PIX_FMT_UYVY422, MKTAG('V', 'D', 'T', 'Z') }, /* SoftLab-NSK VideoTizer */{ AV_PIX_FMT_UYVY422, MKTAG('a', 'u', 'v', '2') },{ AV_PIX_FMT_UYVY422, MKTAG('c', 'y', 'u', 'v') }, /* CYUV is also Creative YUV */{ AV_PIX_FMT_UYYVYY411, MKTAG('Y', '4', '1', '1') },{ AV_PIX_FMT_GRAY8,   MKTAG('G', 'R', 'E', 'Y') },{ AV_PIX_FMT_NV12,    MKTAG('N', 'V', '1', '2') },{ AV_PIX_FMT_NV21,    MKTAG('N', 'V', '2', '1') },{ AV_PIX_FMT_VUYA,    MKTAG('A', 'Y', 'U', 'V') }, /* MS 4:4:4:4 *//* nut */{ AV_PIX_FMT_RGB555LE, MKTAG('R', 'G', 'B', 15) },{ AV_PIX_FMT_BGR555LE, MKTAG('B', 'G', 'R', 15) },{ AV_PIX_FMT_RGB565LE, MKTAG('R', 'G', 'B', 16) },{ AV_PIX_FMT_BGR565LE, MKTAG('B', 'G', 'R', 16) },{ AV_PIX_FMT_RGB555BE, MKTAG(15 , 'B', 'G', 'R') },{ AV_PIX_FMT_BGR555BE, MKTAG(15 , 'R', 'G', 'B') },{ AV_PIX_FMT_RGB565BE, MKTAG(16 , 'B', 'G', 'R') },{ AV_PIX_FMT_BGR565BE, MKTAG(16 , 'R', 'G', 'B') },{ AV_PIX_FMT_RGB444LE, MKTAG('R', 'G', 'B', 12) },{ AV_PIX_FMT_BGR444LE, MKTAG('B', 'G', 'R', 12) },{ AV_PIX_FMT_RGB444BE, MKTAG(12 , 'B', 'G', 'R') },{ AV_PIX_FMT_BGR444BE, MKTAG(12 , 'R', 'G', 'B') },{ AV_PIX_FMT_RGBA64LE, MKTAG('R', 'B', 'A', 64 ) },{ AV_PIX_FMT_BGRA64LE, MKTAG('B', 'R', 'A', 64 ) },{ AV_PIX_FMT_RGBA64BE, MKTAG(64 , 'R', 'B', 'A') },{ AV_PIX_FMT_BGRA64BE, MKTAG(64 , 'B', 'R', 'A') },{ AV_PIX_FMT_RGBA,     MKTAG('R', 'G', 'B', 'A') },{ AV_PIX_FMT_RGB0,     MKTAG('R', 'G', 'B',  0 ) },{ AV_PIX_FMT_BGRA,     MKTAG('B', 'G', 'R', 'A') },{ AV_PIX_FMT_BGR0,     MKTAG('B', 'G', 'R',  0 ) },{ AV_PIX_FMT_ABGR,     MKTAG('A', 'B', 'G', 'R') },{ AV_PIX_FMT_0BGR,     MKTAG( 0 , 'B', 'G', 'R') },{ AV_PIX_FMT_ARGB,     MKTAG('A', 'R', 'G', 'B') },{ AV_PIX_FMT_0RGB,     MKTAG( 0 , 'R', 'G', 'B') },{ AV_PIX_FMT_RGB24,    MKTAG('R', 'G', 'B', 24 ) },{ AV_PIX_FMT_BGR24,    MKTAG('B', 'G', 'R', 24 ) },{ AV_PIX_FMT_YUV411P,  MKTAG('4', '1', '1', 'P') },{ AV_PIX_FMT_YUV422P,  MKTAG('4', '2', '2', 'P') },{ AV_PIX_FMT_YUVJ422P, MKTAG('4', '2', '2', 'P') },{ AV_PIX_FMT_YUV440P,  MKTAG('4', '4', '0', 'P') },{ AV_PIX_FMT_YUVJ440P, MKTAG('4', '4', '0', 'P') },{ AV_PIX_FMT_YUV444P,  MKTAG('4', '4', '4', 'P') },{ AV_PIX_FMT_YUVJ444P, MKTAG('4', '4', '4', 'P') },{ AV_PIX_FMT_MONOWHITE,MKTAG('B', '1', 'W', '0') },{ AV_PIX_FMT_MONOBLACK,MKTAG('B', '0', 'W', '1') },{ AV_PIX_FMT_BGR8,     MKTAG('B', 'G', 'R',  8 ) },{ AV_PIX_FMT_RGB8,     MKTAG('R', 'G', 'B',  8 ) },{ AV_PIX_FMT_BGR4,     MKTAG('B', 'G', 'R',  4 ) },{ AV_PIX_FMT_RGB4,     MKTAG('R', 'G', 'B',  4 ) },{ AV_PIX_FMT_RGB4_BYTE,MKTAG('B', '4', 'B', 'Y') },{ AV_PIX_FMT_BGR4_BYTE,MKTAG('R', '4', 'B', 'Y') },{ AV_PIX_FMT_RGB48LE,  MKTAG('R', 'G', 'B', 48 ) },{ AV_PIX_FMT_RGB48BE,  MKTAG( 48, 'R', 'G', 'B') },{ AV_PIX_FMT_BGR48LE,  MKTAG('B', 'G', 'R', 48 ) },{ AV_PIX_FMT_BGR48BE,  MKTAG( 48, 'B', 'G', 'R') },{ AV_PIX_FMT_GRAY9LE,     MKTAG('Y', '1',  0 ,  9 ) },{ AV_PIX_FMT_GRAY9BE,     MKTAG( 9 ,  0 , '1', 'Y') },{ AV_PIX_FMT_GRAY10LE,    MKTAG('Y', '1',  0 , 10 ) },{ AV_PIX_FMT_GRAY10BE,    MKTAG(10 ,  0 , '1', 'Y') },{ AV_PIX_FMT_GRAY12LE,    MKTAG('Y', '1',  0 , 12 ) },{ AV_PIX_FMT_GRAY12BE,    MKTAG(12 ,  0 , '1', 'Y') },{ AV_PIX_FMT_GRAY14LE,    MKTAG('Y', '1',  0 , 14 ) },{ AV_PIX_FMT_GRAY14BE,    MKTAG(14 ,  0 , '1', 'Y') },{ AV_PIX_FMT_GRAY16LE,    MKTAG('Y', '1',  0 , 16 ) },{ AV_PIX_FMT_GRAY16BE,    MKTAG(16 ,  0 , '1', 'Y') },{ AV_PIX_FMT_YUV420P9LE,  MKTAG('Y', '3', 11 ,  9 ) },{ AV_PIX_FMT_YUV420P9BE,  MKTAG( 9 , 11 , '3', 'Y') },{ AV_PIX_FMT_YUV422P9LE,  MKTAG('Y', '3', 10 ,  9 ) },{ AV_PIX_FMT_YUV422P9BE,  MKTAG( 9 , 10 , '3', 'Y') },{ AV_PIX_FMT_YUV444P9LE,  MKTAG('Y', '3',  0 ,  9 ) },{ AV_PIX_FMT_YUV444P9BE,  MKTAG( 9 ,  0 , '3', 'Y') },{ AV_PIX_FMT_YUV420P10LE, MKTAG('Y', '3', 11 , 10 ) },{ AV_PIX_FMT_YUV420P10BE, MKTAG(10 , 11 , '3', 'Y') },{ AV_PIX_FMT_YUV422P10LE, MKTAG('Y', '3', 10 , 10 ) },{ AV_PIX_FMT_YUV422P10BE, MKTAG(10 , 10 , '3', 'Y') },{ AV_PIX_FMT_YUV444P10LE, MKTAG('Y', '3',  0 , 10 ) },{ AV_PIX_FMT_YUV444P10BE, MKTAG(10 ,  0 , '3', 'Y') },{ AV_PIX_FMT_YUV420P12LE, MKTAG('Y', '3', 11 , 12 ) },{ AV_PIX_FMT_YUV420P12BE, MKTAG(12 , 11 , '3', 'Y') },{ AV_PIX_FMT_YUV422P12LE, MKTAG('Y', '3', 10 , 12 ) },{ AV_PIX_FMT_YUV422P12BE, MKTAG(12 , 10 , '3', 'Y') },{ AV_PIX_FMT_YUV444P12LE, MKTAG('Y', '3',  0 , 12 ) },{ AV_PIX_FMT_YUV444P12BE, MKTAG(12 ,  0 , '3', 'Y') },{ AV_PIX_FMT_YUV420P14LE, MKTAG('Y', '3', 11 , 14 ) },{ AV_PIX_FMT_YUV420P14BE, MKTAG(14 , 11 , '3', 'Y') },{ AV_PIX_FMT_YUV422P14LE, MKTAG('Y', '3', 10 , 14 ) },{ AV_PIX_FMT_YUV422P14BE, MKTAG(14 , 10 , '3', 'Y') },{ AV_PIX_FMT_YUV444P14LE, MKTAG('Y', '3',  0 , 14 ) },{ AV_PIX_FMT_YUV444P14BE, MKTAG(14 ,  0 , '3', 'Y') },{ AV_PIX_FMT_YUV420P16LE, MKTAG('Y', '3', 11 , 16 ) },{ AV_PIX_FMT_YUV420P16BE, MKTAG(16 , 11 , '3', 'Y') },{ AV_PIX_FMT_YUV422P16LE, MKTAG('Y', '3', 10 , 16 ) },{ AV_PIX_FMT_YUV422P16BE, MKTAG(16 , 10 , '3', 'Y') },{ AV_PIX_FMT_YUV444P16LE, MKTAG('Y', '3',  0 , 16 ) },{ AV_PIX_FMT_YUV444P16BE, MKTAG(16 ,  0 , '3', 'Y') },{ AV_PIX_FMT_YUVA420P,    MKTAG('Y', '4', 11 ,  8 ) },{ AV_PIX_FMT_YUVA422P,    MKTAG('Y', '4', 10 ,  8 ) },{ AV_PIX_FMT_YUVA444P,    MKTAG('Y', '4',  0 ,  8 ) },{ AV_PIX_FMT_YA8,         MKTAG('Y', '2',  0 ,  8 ) },{ AV_PIX_FMT_PAL8,        MKTAG('P', 'A', 'L',  8 ) },{ AV_PIX_FMT_YUVA420P9LE,  MKTAG('Y', '4', 11 ,  9 ) },{ AV_PIX_FMT_YUVA420P9BE,  MKTAG( 9 , 11 , '4', 'Y') },{ AV_PIX_FMT_YUVA422P9LE,  MKTAG('Y', '4', 10 ,  9 ) },{ AV_PIX_FMT_YUVA422P9BE,  MKTAG( 9 , 10 , '4', 'Y') },{ AV_PIX_FMT_YUVA444P9LE,  MKTAG('Y', '4',  0 ,  9 ) },{ AV_PIX_FMT_YUVA444P9BE,  MKTAG( 9 ,  0 , '4', 'Y') },{ AV_PIX_FMT_YUVA420P10LE, MKTAG('Y', '4', 11 , 10 ) },{ AV_PIX_FMT_YUVA420P10BE, MKTAG(10 , 11 , '4', 'Y') },{ AV_PIX_FMT_YUVA422P10LE, MKTAG('Y', '4', 10 , 10 ) },{ AV_PIX_FMT_YUVA422P10BE, MKTAG(10 , 10 , '4', 'Y') },{ AV_PIX_FMT_YUVA444P10LE, MKTAG('Y', '4',  0 , 10 ) },{ AV_PIX_FMT_YUVA444P10BE, MKTAG(10 ,  0 , '4', 'Y') },{ AV_PIX_FMT_YUVA422P12LE, MKTAG('Y', '4', 10 , 12 ) },{ AV_PIX_FMT_YUVA422P12BE, MKTAG(12 , 10 , '4', 'Y') },{ AV_PIX_FMT_YUVA444P12LE, MKTAG('Y', '4',  0 , 12 ) },{ AV_PIX_FMT_YUVA444P12BE, MKTAG(12 ,  0 , '4', 'Y') },{ AV_PIX_FMT_YUVA420P16LE, MKTAG('Y', '4', 11 , 16 ) },{ AV_PIX_FMT_YUVA420P16BE, MKTAG(16 , 11 , '4', 'Y') },{ AV_PIX_FMT_YUVA422P16LE, MKTAG('Y', '4', 10 , 16 ) },{ AV_PIX_FMT_YUVA422P16BE, MKTAG(16 , 10 , '4', 'Y') },{ AV_PIX_FMT_YUVA444P16LE, MKTAG('Y', '4',  0 , 16 ) },{ AV_PIX_FMT_YUVA444P16BE, MKTAG(16 ,  0 , '4', 'Y') },{ AV_PIX_FMT_GBRP,         MKTAG('G', '3', 00 ,  8 ) },{ AV_PIX_FMT_GBRP9LE,      MKTAG('G', '3', 00 ,  9 ) },{ AV_PIX_FMT_GBRP9BE,      MKTAG( 9 , 00 , '3', 'G') },{ AV_PIX_FMT_GBRP10LE,     MKTAG('G', '3', 00 , 10 ) },{ AV_PIX_FMT_GBRP10BE,     MKTAG(10 , 00 , '3', 'G') },{ AV_PIX_FMT_GBRP12LE,     MKTAG('G', '3', 00 , 12 ) },{ AV_PIX_FMT_GBRP12BE,     MKTAG(12 , 00 , '3', 'G') },{ AV_PIX_FMT_GBRP14LE,     MKTAG('G', '3', 00 , 14 ) },{ AV_PIX_FMT_GBRP14BE,     MKTAG(14 , 00 , '3', 'G') },{ AV_PIX_FMT_GBRP16LE,     MKTAG('G', '3', 00 , 16 ) },{ AV_PIX_FMT_GBRP16BE,     MKTAG(16 , 00 , '3', 'G') },{ AV_PIX_FMT_GBRAP,        MKTAG('G', '4', 00 ,  8 ) },{ AV_PIX_FMT_GBRAP10LE,    MKTAG('G', '4', 00 , 10 ) },{ AV_PIX_FMT_GBRAP10BE,    MKTAG(10 , 00 , '4', 'G') },{ AV_PIX_FMT_GBRAP12LE,    MKTAG('G', '4', 00 , 12 ) },{ AV_PIX_FMT_GBRAP12BE,    MKTAG(12 , 00 , '4', 'G') },{ AV_PIX_FMT_GBRAP14LE,    MKTAG('G', '4', 00 , 14 ) },{ AV_PIX_FMT_GBRAP14BE,    MKTAG(14 , 00 , '4', 'G') },{ AV_PIX_FMT_GBRAP16LE,    MKTAG('G', '4', 00 , 16 ) },{ AV_PIX_FMT_GBRAP16BE,    MKTAG(16 , 00 , '4', 'G') },{ AV_PIX_FMT_XYZ12LE,      MKTAG('X', 'Y', 'Z' , 36 ) },{ AV_PIX_FMT_XYZ12BE,      MKTAG(36 , 'Z' , 'Y', 'X') },{ AV_PIX_FMT_BAYER_BGGR8,    MKTAG(0xBA, 'B', 'G', 8   ) },{ AV_PIX_FMT_BAYER_BGGR16LE, MKTAG(0xBA, 'B', 'G', 16  ) },{ AV_PIX_FMT_BAYER_BGGR16BE, MKTAG(16  , 'G', 'B', 0xBA) },{ AV_PIX_FMT_BAYER_RGGB8,    MKTAG(0xBA, 'R', 'G', 8   ) },{ AV_PIX_FMT_BAYER_RGGB16LE, MKTAG(0xBA, 'R', 'G', 16  ) },{ AV_PIX_FMT_BAYER_RGGB16BE, MKTAG(16  , 'G', 'R', 0xBA) },{ AV_PIX_FMT_BAYER_GBRG8,    MKTAG(0xBA, 'G', 'B', 8   ) },{ AV_PIX_FMT_BAYER_GBRG16LE, MKTAG(0xBA, 'G', 'B', 16  ) },{ AV_PIX_FMT_BAYER_GBRG16BE, MKTAG(16,   'B', 'G', 0xBA) },{ AV_PIX_FMT_BAYER_GRBG8,    MKTAG(0xBA, 'G', 'R', 8   ) },{ AV_PIX_FMT_BAYER_GRBG16LE, MKTAG(0xBA, 'G', 'R', 16  ) },{ AV_PIX_FMT_BAYER_GRBG16BE, MKTAG(16,   'R', 'G', 0xBA) },/* quicktime */{ AV_PIX_FMT_YUV420P, MKTAG('R', '4', '2', '0') }, /* Radius DV YUV PAL */{ AV_PIX_FMT_YUV411P, MKTAG('R', '4', '1', '1') }, /* Radius DV YUV NTSC */{ AV_PIX_FMT_UYVY422, MKTAG('2', 'v', 'u', 'y') },{ AV_PIX_FMT_UYVY422, MKTAG('2', 'V', 'u', 'y') },{ AV_PIX_FMT_UYVY422, MKTAG('A', 'V', 'U', 'I') }, /* FIXME merge both fields */{ AV_PIX_FMT_UYVY422, MKTAG('b', 'x', 'y', 'v') },{ AV_PIX_FMT_YUYV422, MKTAG('y', 'u', 'v', '2') },{ AV_PIX_FMT_YUYV422, MKTAG('y', 'u', 'v', 's') },{ AV_PIX_FMT_YUYV422, MKTAG('D', 'V', 'O', 'O') }, /* Digital Voodoo SD 8 Bit */{ AV_PIX_FMT_RGB555LE,MKTAG('L', '5', '5', '5') },{ AV_PIX_FMT_RGB565LE,MKTAG('L', '5', '6', '5') },{ AV_PIX_FMT_RGB565BE,MKTAG('B', '5', '6', '5') },{ AV_PIX_FMT_BGR24,   MKTAG('2', '4', 'B', 'G') },{ AV_PIX_FMT_BGR24,   MKTAG('b', 'x', 'b', 'g') },{ AV_PIX_FMT_BGRA,    MKTAG('B', 'G', 'R', 'A') },{ AV_PIX_FMT_RGBA,    MKTAG('R', 'G', 'B', 'A') },{ AV_PIX_FMT_RGB24,   MKTAG('b', 'x', 'r', 'g') },{ AV_PIX_FMT_ABGR,    MKTAG('A', 'B', 'G', 'R') },{ AV_PIX_FMT_GRAY16BE,MKTAG('b', '1', '6', 'g') },{ AV_PIX_FMT_RGB48BE, MKTAG('b', '4', '8', 'r') },{ AV_PIX_FMT_RGBA64BE,MKTAG('b', '6', '4', 'a') },{ AV_PIX_FMT_BAYER_RGGB16BE, MKTAG('B', 'G', 'G', 'R') },/* vlc */{ AV_PIX_FMT_YUV410P,     MKTAG('I', '4', '1', '0') },{ AV_PIX_FMT_YUV411P,     MKTAG('I', '4', '1', '1') },{ AV_PIX_FMT_YUV422P,     MKTAG('I', '4', '2', '2') },{ AV_PIX_FMT_YUV440P,     MKTAG('I', '4', '4', '0') },{ AV_PIX_FMT_YUV444P,     MKTAG('I', '4', '4', '4') },{ AV_PIX_FMT_YUVJ420P,    MKTAG('J', '4', '2', '0') },{ AV_PIX_FMT_YUVJ422P,    MKTAG('J', '4', '2', '2') },{ AV_PIX_FMT_YUVJ440P,    MKTAG('J', '4', '4', '0') },{ AV_PIX_FMT_YUVJ444P,    MKTAG('J', '4', '4', '4') },{ AV_PIX_FMT_YUVA444P,    MKTAG('Y', 'U', 'V', 'A') },{ AV_PIX_FMT_YUVA420P,    MKTAG('I', '4', '0', 'A') },{ AV_PIX_FMT_YUVA422P,    MKTAG('I', '4', '2', 'A') },{ AV_PIX_FMT_RGB8,        MKTAG('R', 'G', 'B', '2') },{ AV_PIX_FMT_RGB555LE,    MKTAG('R', 'V', '1', '5') },{ AV_PIX_FMT_RGB565LE,    MKTAG('R', 'V', '1', '6') },{ AV_PIX_FMT_BGR24,       MKTAG('R', 'V', '2', '4') },{ AV_PIX_FMT_BGR0,        MKTAG('R', 'V', '3', '2') },{ AV_PIX_FMT_RGBA,        MKTAG('A', 'V', '3', '2') },{ AV_PIX_FMT_YUV420P9LE,  MKTAG('I', '0', '9', 'L') },{ AV_PIX_FMT_YUV420P9BE,  MKTAG('I', '0', '9', 'B') },{ AV_PIX_FMT_YUV422P9LE,  MKTAG('I', '2', '9', 'L') },{ AV_PIX_FMT_YUV422P9BE,  MKTAG('I', '2', '9', 'B') },{ AV_PIX_FMT_YUV444P9LE,  MKTAG('I', '4', '9', 'L') },{ AV_PIX_FMT_YUV444P9BE,  MKTAG('I', '4', '9', 'B') },{ AV_PIX_FMT_YUV420P10LE, MKTAG('I', '0', 'A', 'L') },{ AV_PIX_FMT_YUV420P10BE, MKTAG('I', '0', 'A', 'B') },{ AV_PIX_FMT_YUV422P10LE, MKTAG('I', '2', 'A', 'L') },{ AV_PIX_FMT_YUV422P10BE, MKTAG('I', '2', 'A', 'B') },{ AV_PIX_FMT_YUV444P10LE, MKTAG('I', '4', 'A', 'L') },{ AV_PIX_FMT_YUV444P10BE, MKTAG('I', '4', 'A', 'B') },{ AV_PIX_FMT_YUV420P12LE, MKTAG('I', '0', 'C', 'L') },{ AV_PIX_FMT_YUV420P12BE, MKTAG('I', '0', 'C', 'B') },{ AV_PIX_FMT_YUV422P12LE, MKTAG('I', '2', 'C', 'L') },{ AV_PIX_FMT_YUV422P12BE, MKTAG('I', '2', 'C', 'B') },{ AV_PIX_FMT_YUV444P12LE, MKTAG('I', '4', 'C', 'L') },{ AV_PIX_FMT_YUV444P12BE, MKTAG('I', '4', 'C', 'B') },{ AV_PIX_FMT_YUV420P16LE, MKTAG('I', '0', 'F', 'L') },{ AV_PIX_FMT_YUV420P16BE, MKTAG('I', '0', 'F', 'B') },{ AV_PIX_FMT_YUV444P16LE, MKTAG('I', '4', 'F', 'L') },{ AV_PIX_FMT_YUV444P16BE, MKTAG('I', '4', 'F', 'B') },/* special */{ AV_PIX_FMT_RGB565LE,MKTAG( 3 ,  0 ,  0 ,  0 ) }, /* flipped RGB565LE */{ AV_PIX_FMT_YUV444P, MKTAG('Y', 'V', '2', '4') }, /* YUV444P, swapped UV */{ AV_PIX_FMT_NONE, 0 },
};

下面列一下可能用到的命令行测试指令:

# gstreamer 指令,注意分辨率和帧率要摄像头支持的,否则会失败# 打开摄像头并显示视频
gst-launch-1.0 v4l2src device=/dev/video9 ! video/x-raw,format=YUY2,width=640,height=480,framerate=30/1 ! videoconvert ! ximagesink# 打开摄像头并显示视频
gst-launch-1.0 -v v4l2src device=/dev/video9 ! "video/x-raw, format=(string)YUY2,width=(int)640, height=(int)480, framerate=(fraction)30/1" ! videoconvert ! kmssink
# 显示USB
lsusb
# 显示所有视频设备
ls /dev/video*
ll /dev/video*
# 显示所有摄像头
v4l2-ctl --list-devices
# 显示摄像头支持的格式和分辨率
v4l2-ctl --device=/dev/video9 --list-formats-ext
# 查看支持的可调参数
v4l2-ctl -d /dev/video9 --list-ctrls

部分指令效果记录

# lsusb
Bus 005 Device 001: ID 1d6b:0002
Bus 003 Device 001: ID 1d6b:0001
Bus 001 Device 001: ID 1d6b:0002
Bus 005 Device 018: ID 05e3:0610
Bus 005 Device 019: ID 2bc5:050b
Bus 008 Device 001: ID 1d6b:0003
Bus 006 Device 001: ID 1d6b:0003
Bus 004 Device 001: ID 1d6b:0001
Bus 002 Device 001: ID 1d6b:0002
Bus 005 Device 020: ID 2bc5:060b
Bus 007 Device 001: ID 1d6b:0002
# ll /dev/video*
crw-rw---- 1 root video 81,  0 Mar 20 14:09 /dev/video0
crw-rw---- 1 root video 81,  1 Mar 20 14:09 /dev/video1
crw-rw---- 1 root video 81, 10 Mar 20 14:50 /dev/video10
crw-rw---- 1 root video 81,  2 Mar 20 14:09 /dev/video2
crw-rw---- 1 root video 81,  3 Mar 20 14:09 /dev/video3
crw-rw---- 1 root video 81,  4 Mar 20 14:09 /dev/video4
crw-rw---- 1 root video 81,  5 Mar 20 14:09 /dev/video5
crw-rw---- 1 root video 81,  6 Mar 20 14:09 /dev/video6
crw-rw---- 1 root video 81,  7 Mar 20 14:09 /dev/video7
crw-rw---- 1 root video 81,  8 Mar 20 14:09 /dev/video8
crw-rw---- 1 root video 81,  9 Mar 20 14:50 /dev/video9
lrwxrwxrwx 1 root root       6 Mar 20 14:09 /dev/video-camera0 -> video0
# v4l2-ctl --list-devices
rkisp-statistics (platform: rkisp):/dev/video7/dev/video8rkisp_mainpath (platform:rkisp-vir0):/dev/video0/dev/video1/dev/video2/dev/video3/dev/video4/dev/video5/dev/video6/dev/media0USB 2.0 Camera: USB Camera (usb-xhci-hcd.0.auto-1.1):/dev/video9/dev/video10/dev/media1
# v4l2-ctl --device=/dev/video9 --list-formats-ext
ioctl: VIDIOC_ENUM_FMTType: Video Capture[0]: 'MJPG' (Motion-JPEG, compressed)Size: Discrete 2592x1944Interval: Discrete 0.040s (25.000 fps)Size: Discrete 2560x1440Interval: Discrete 0.040s (25.000 fps)Size: Discrete 1920x1080Interval: Discrete 0.017s (60.000 fps)Interval: Discrete 0.022s (45.000 fps)Interval: Discrete 0.033s (30.000 fps)Interval: Discrete 0.040s (25.000 fps)Interval: Discrete 0.050s (20.000 fps)Interval: Discrete 0.067s (15.000 fps)Interval: Discrete 0.100s (10.000 fps)Size: Discrete 1280x960Interval: Discrete 0.017s (60.000 fps)Interval: Discrete 0.022s (45.000 fps)Interval: Discrete 0.033s (30.000 fps)Interval: Discrete 0.040s (25.000 fps)Interval: Discrete 0.050s (20.000 fps)Interval: Discrete 0.067s (15.000 fps)Interval: Discrete 0.100s (10.000 fps)Size: Discrete 1280x720Interval: Discrete 0.017s (60.000 fps)Interval: Discrete 0.022s (45.000 fps)Interval: Discrete 0.033s (30.000 fps)Interval: Discrete 0.040s (25.000 fps)Interval: Discrete 0.050s (20.000 fps)Interval: Discrete 0.067s (15.000 fps)Interval: Discrete 0.100s (10.000 fps)Size: Discrete 640x480Interval: Discrete 0.017s (60.000 fps)Interval: Discrete 0.022s (45.000 fps)Interval: Discrete 0.033s (30.000 fps)Interval: Discrete 0.040s (25.000 fps)Interval: Discrete 0.050s (20.000 fps)Interval: Discrete 0.067s (15.000 fps)Interval: Discrete 0.100s (10.000 fps)Size: Discrete 320x240Interval: Discrete 0.017s (60.000 fps)Interval: Discrete 0.022s (45.000 fps)Interval: Discrete 0.033s (30.000 fps)Interval: Discrete 0.040s (25.000 fps)Interval: Discrete 0.050s (20.000 fps)Interval: Discrete 0.067s (15.000 fps)Interval: Discrete 0.100s (10.000 fps)[1]: 'YUYV' (YUYV 4:2:2)Size: Discrete 2592x1944Interval: Discrete 0.500s (2.000 fps)Size: Discrete 2560x1440Interval: Discrete 0.500s (2.000 fps)Size: Discrete 1920x1080Interval: Discrete 0.200s (5.000 fps)Size: Discrete 1280x960Interval: Discrete 0.200s (5.000 fps)Size: Discrete 1280x720Interval: Discrete 0.200s (5.000 fps)Size: Discrete 640x480Interval: Discrete 0.040s (25.000 fps)Size: Discrete 320x240Interval: Discrete 0.033s (30.000 fps)
# v4l2-ctl -d /dev/video9 --list-ctrlsbrightness 0x00980900 (int)    : min=-64 max=64 step=1 default=0 value=0contrast 0x00980901 (int)    : min=0 max=64 step=1 default=32 value=32saturation 0x00980902 (int)    : min=0 max=128 step=1 default=64 value=64hue 0x00980903 (int)    : min=-40 max=40 step=1 default=0 value=0white_balance_temperature_auto 0x0098090c (bool)   : default=1 value=1gamma 0x00980910 (int)    : min=72 max=500 step=1 default=100 value=100gain 0x00980913 (int)    : min=0 max=100 step=1 default=0 value=0power_line_frequency 0x00980918 (menu)   : min=0 max=2 default=1 value=1white_balance_temperature 0x0098091a (int)    : min=2800 max=6500 step=1 default=4600 value=4600 flags=inactivesharpness 0x0098091b (int)    : min=0 max=6 step=1 default=1 value=1backlight_compensation 0x0098091c (int)    : min=0 max=65535 step=1 default=0 value=0exposure_auto 0x009a0901 (menu)   : min=0 max=3 default=3 value=3exposure_absolute 0x009a0902 (int)    : min=1 max=5000 step=1 default=157 value=157 flags=inactiveexposure_auto_priority 0x009a0903 (bool)   : default=0 value=1

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/759635.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

墨菲安全在软件供应链安全领域阶段性总结及思考

向外看&#xff1a;墨菲安全在软件供应链安全领域的一些洞察、思考、行动 洞察 现状&挑战&#xff1a; 过去开发安全体系是无法解决软件供应链安全问题的&#xff1b;一些过去专注开发安全领域的厂商正在错误的引导行业用开发安全思维解决软件供应链安全问题&#xff0c;治…

树形递归模板

详情参考CSDN链接: https://www.cnblogs.com/lidar/p/12972792.html public class Menu {// 菜单idprivate String id;// 菜单名称private String name;// 父菜单idprivate String parentId;// 菜单urlprivate String url;// 菜单图标private String icon;// 菜单顺序private …

laravel10使用firebase/php-jwt 6.0

话不多说&#xff0c;直接上示例 <?php /*** Created by PhpStorm* User: xxx 根据自己情况设置* Date: 2024/3/20* Time: 15:53* Brief:* docs:*/namespace App\lib\jwt;use App\Exceptions\BaseException; use Exception; use Firebase\JWT\JWT; use Firebase\JWT\Key;c…

[linux] Key is stored in legacy trusted.gpg keyring

修复 Ubuntu 中的 “Key is stored in legacy trusted.gpg keyring” 问题_key is stored in legacy trusted.gpg keyring (/etc/-CSDN博客 复制到trusted.gpd.d 目录中(快速但不优雅的方法) 如果你觉得手动做上面的事情不舒服&#xff0c;那么&#xff0c;你可以忽略这个警告…

SpringCloud中的@EnableDiscoceryClient和@EnableFeignClients注解的作用解析、RPC远程过程调用

目录 EnableDiscoveryClient 服务发现的核心概念 服务注册中心 EnableDiscoveryClient注解的作用 服务心跳健康检查 使用示例 EnableFeignClients Feign简介 EnableFeignClients注解的作用 RPC&#xff08;Remote Procedure Call&#xff09; 参考链接 Spring Cloud…

vue3 + Element + nodejs 大文件上传、断点续传

前言 大文件上传&#xff0c;一般时间都比较长&#xff0c;这么长的时间内&#xff0c;可能会出现各种各样的问题&#xff0c;比如断网&#xff0c;一旦出错&#xff0c;我们的文件就需要重新上传&#xff0c;这样造成资源浪费&#xff0c;如果我们使用了断点续传继续就不会造成…

ES6 Fetch API的基础使用

XMLHttpRequest 的问题 所有的功能全部几乎在同一个对象上&#xff0c;容易书写出混乱不易维护的代码 采用传统的事件驱动模式&#xff0c;无法适配的 Promise Api Fetch Api 的特点 并非取代 AJAX,而是对 AJAX 传统 API 的改进 精细的功能分割:头部信息、请求信息、响应信…

javaScript——BFS结合队列求迷宫最短路径

这里推荐先去看下B站这个老师讲的BFS迷宫问题&#xff0c;只用看前五分钟就能懂用BFS队列实现的原理。[POJ] 3984 迷宫问题 BFS_哔哩哔哩_bilibili 问题描述&#xff1a;由m*n的矩阵构成了一个迷宫&#xff0c; 矩阵中为1的元素表示障碍物&#xff0c;不能走&#xff0c;为0表示…

如何在职场中提升自己的竞争力

随着社会的发展&#xff0c;职场竞争日益激烈。如何在职场中提升自己的竞争力&#xff0c;成为许多职场人士关注的焦点。本文将从以下几个方面为大家提供一些建议。 一、不断学习&#xff0c;提升专业技能 在职场中&#xff0c;专业技能是衡量一个人竞争力的重要标准。要想在职…

软考高级:项目管理-软件质量控制和质量保证概念和例题

作者&#xff1a;明明如月学长&#xff0c; CSDN 博客专家&#xff0c;大厂高级 Java 工程师&#xff0c;《性能优化方法论》作者、《解锁大厂思维&#xff1a;剖析《阿里巴巴Java开发手册》》、《再学经典&#xff1a;《Effective Java》独家解析》专栏作者。 热门文章推荐&am…

让数据在两个buckets之间传输 - Google Storage Transfer Service

在业务场景中&#xff0c; 有时我们不想直接暴露数据存储空间给上游系统&#xff0c; 而需要设置1个landing Path 让上游系统发送数据 如图&#xff1a; 我们只需grant landing bucket 的权限给上游系统&#xff0c; 而上游系统是访问不了storage bucket的保证了数据隔离 但是…

这个小技巧真不错!

大家好&#xff0c;我是前端队长。前端程序员&#xff0c;2023年开始玩副业。玩过AI绘画&#xff0c;公众号爆文项目&#xff0c;累计变现五位数。 今天看到萌萌在陪伴群分享了我公众号次图封面显示不全的问题。 这里我分享设计师萌萌的方法&#xff0c;很简单&#xff0c;但是…

想要在浏览器中访问pdf内容,服务器器该如何配置

1、需要先放置PDF文件&#xff1a; 将你的PDF文件放置在服务器的某个目录下&#xff0c;例如/var/www/html/pdfs/。确保服务器有权限读取这个目录中的文件。 2、配置Nginx&#xff1a; 在Nginx的配置文件中为PDF文件添加一个location块。 server { listen 80; server_name…

为什么HubSpot可以干翻营销和销售副总裁?

本文纯属虚构&#xff0c;作为销售的人&#xff0c;看完惊出一身大汗绝对属于正常。建议您先准备一个大毛巾&#xff0c;等下看完肯定会出汗的。还有&#xff0c;别忘记睡前给自己倒满一杯红酒&#x1f377;&#xff0c;今晚会失眠的呢。 1. 为什么是Hubspot&#xff1f; 2. H…

make | ubuntu源码编译指定版本make

下载源码包&#xff1a;Index of /gnu/make # 解压 tar -zxvf cmake-xxx.tar.gzcd cmake-xxx# 编译配置 ./configure ./build.sh# 先用apt安装一个make apt update apt install make# 然后使用系统的make来编译指定版本的make make install# 这时已经生成了可执行程序make # 然…

C# SetWindowPos函数

在C#中&#xff0c;SetWindowPos函数用于设置窗口的位置和大小。 原型&#xff1a; [DllImport("user32.dll", SetLastError true)] [return: MarshalAs(UnmanagedType.Bool)] public static extern bool SetWindowPos(IntPtr hWnd, IntPtr hWndInsertAfter, int …

金融知识分享系列之:KD指标

金融知识分享系列之&#xff1a;KD指标 一、KD指标二、KD指标计算三、KD指标原理四、KD指标应用 一、KD指标 KD信号提供入场的工具 名称&#xff1a;随机震荡指标参数&#xff1a;&#xff08;9,3,3&#xff09;组成&#xff1a;K线&#xff0c;D线&#xff0c;20轴&#xff0…

【Linux】传输层协议:TCP/UDP

目录 netstat pidof UDP协议 TCP协议 TCP协议段格式 TCP协议的相关机制 确认应答&#xff08;ACK&#xff09;机制 超时重传机制 连接管理机制 服务端状态转换 客户端状态转化 流量控制 流量控制常见问题&#xff1a; 滑动窗口 拥塞控制 延迟应答 面向字节流…

流畅的 Python 第二版(GPT 重译)(九)

第四部分&#xff1a;控制流 第十七章&#xff1a;迭代器、生成器和经典协程 当我在我的程序中看到模式时&#xff0c;我认为这是一个麻烦的迹象。程序的形状应该只反映它需要解决的问题。代码中的任何其他规律性对我来说都是一个迹象&#xff0c;至少对我来说&#xff0c;这表…

(day 14)JavaScript学习笔记(对象2)

概述 这是我的学习笔记&#xff0c;记录了JavaScript的学习过程。在写博客的时候我会尽量详尽的记录每个知识点。如果你完全没接触过JavaScript&#xff0c;那么这一系列的学习笔记可能会对你有所帮助。 今天继续学习对象&#xff0c;主要是this、getters和setters、原型&#…