OpenCV VideoCapture.get()参数详解

本文详细介绍了OpenCV中VideoCapture.get()函数的使用,包括获取视频位置、帧率、帧宽高、编解码器等关键属性。此函数对于视频处理和分析至关重要,尤其是针对摄像头设备进行图像调整,如亮度、对比度、饱和度等。了解这些参数有助于更好地操控和理解视频流。

OpenCV VideoCapture.get()参数详解


param	define
cv2.VideoCapture.get(0)	CV_CAP_PROP_POS_MSEC     视频文件的当前位置(播放)以毫秒为单位
cv2.VideoCapture.get(1)	CV_CAP_PROP_POS_FRAMES 基于以0开始的被捕获或解码的帧索引
cv2.VideoCapture.get(2)	CV_CAP_PROP_POS_AVI_RATIO 视频文件的相对位置(播放):0=电影开始,1=影片的结尾。
cv2.VideoCapture.get(3)	CV_CAP_PROP_FRAME_WIDTH 在视频流的帧的宽度
cv2.VideoCapture.get(4)	CV_CAP_PROP_FRAME_HEIGHT 在视频流的帧的高度
cv2.VideoCapture.get(5)	CV_CAP_PROP_FPS 帧速率
cv2.VideoCapture.get(6)	CV_CAP_PROP_FOURCC 编解码的4-字符代码
cv2.VideoCapture.get(7)	CV_CAP_PROP_FRAME_COUNT 视频文件中的帧数
cv2.VideoCapture.get(8)	CV_CAP_PROP_FORMAT 返回对象的格式
cv2.VideoCapture.get(9)	CV_CAP_PROP_MODE 返回后端特定的值,该值指示当前捕获模式
cv2.VideoCapture.get(10)	 CV_CAP_PROP_BRIGHTNESS 图像的亮度(仅适用于照相机)
cv2.VideoCapture.get(11)	CV_CAP_PROP_CONTRAST 图像的对比度(仅适用于照相机)
cv2.VideoCapture.get(12)	CV_CAP_PROP_SATURATION 图像的饱和度(仅适用于照相机)
cv2.VideoCapture.get(13)	CV_CAP_PROP_HUE 色调图像(仅适用于照相机)
cv2.VideoCapture.get(14)	CV_CAP_PROP_GAIN 图像增益(仅适用于照相机)(Gain在摄影中表示白平衡提升)
cv2.VideoCapture.get(15)	CV_CAP_PROP_EXPOSURE 曝光(仅适用于照相机)
cv2.VideoCapture.get(16)	CV_CAP_PROP_CONVERT_RGB 指示是否应将图像转换为RGB布尔标志
cv2.VideoCapture.get(17)	CV_CAP_PROP_WHITE_BALANCE × 暂时不支持
cv2.VideoCapture.get(18)	CV_CAP_PROP_RECTIFICATION 立体摄像机的矫正标注(目前只有DC1394 v.2.x后端支持这个功能)

来自:https://chenlinwei.blog.youkuaiyun.com/article/details/105559536?spm=1001.2101.3001.6650.5&utm_medium=distribute.pc_relevant.none-task-blog-2%7Edefault%7EBlogCommendFromBaidu%7ERate-5-105559536-blog-93487629.pc_relevant_paycolumn_v3&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2%7Edefault%7EBlogCommendFromBaidu%7ERate-5-105559536-blog-93487629.pc_relevant_paycolumn_v3&utm_relevant_index=10

private boolean configureDeviceResolution(int deviceIndex) { System.err.println("configureDeviceResolution设备设置···"); // if (videoCapture == null || !videoCapture.isOpened()) { // System.err.println("[" + instanceId + "] 设备未打开,无法配置分辨率"); // return false; // } // int[][] resolutions = { { 1920, 1080 }, { 1280, 720 }, { 800, 600 }, { 640, 480 }, { -1, -1 } }; try { videoCapture.set(Videoio.CAP_PROP_FOURCC, VideoWriter.fourcc('M', 'J', 'P', 'G')); videoCapture.set(Videoio.CAP_PROP_FPS, TARGET_FPS); videoCapture.set(Videoio.CAP_PROP_BUFFERSIZE, 1); videoCapture.set(Videoio.CAP_PROP_AUTOFOCUS, 0); videoCapture.set(Videoio.CAP_PROP_AUTO_EXPOSURE, 0); double actualWidth = videoCapture.get(Videoio.CAP_PROP_FRAME_WIDTH); double actualHeight = videoCapture.get(Videoio.CAP_PROP_FRAME_HEIGHT); double actualFps = videoCapture.get(Videoio.CAP_PROP_FPS); if (actualWidth > 0 && actualHeight > 0) { deviceWidth = (int) actualWidth; deviceHeight = (int) actualHeight; // System.out.printf("[" + instanceId + "] 设备 %d 设置成功: %dx%d, FPS: %.1f%n", // deviceIndex, deviceWidth, // deviceHeight, actualFps); Mat testFrame = new Mat(); boolean readSuccess = false; for (int i = 0; i < 100; i++) { if (videoCapture.read(testFrame) && !testFrame.empty()) { readSuccess = true; Scalar meanVal = Core.mean(testFrame); double avgBrightness = (meanVal.val[0] + meanVal.val[1] + meanVal.val[2]) / 3.0; System.out.printf("[" + instanceId + "] 测试帧平均亮度: %.2f%n", avgBrightness); if (avgBrightness < 10.0) { System.out.println("[" + instanceId + "] 警告: 测试帧接近全黑"); } break; } else { System.err.println("设备读取帧失败"); Thread.sleep(50); } } System.err.println("configureDeviceResolution设备设置完成···"); if (readSuccess) { testFrame.release(); return true; } } } catch (Exception e) { System.err.printf("[" + instanceId + "] 配置 %dx%d 失败: %s%n", 1920, 1080, e.getMessage()); } return false; } 我这个VideoCapture参数设置都代表什么意思,正常的视频采集卡都应该怎么设置?
最新发布
10-27
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值