opencv学习笔记4-opencv读取视频及视频信息

 一、读取视频方法

        (1)实例化 VideoCapture 类的对象 capVideo 并打开指定路径的视频文件。

        (2)示例:VideoCapture capVideo("C:\\Users\\86173\\Desktop\\TI\\cat.mp4");

        (3)使用capVideo.open("C:\\Users\\86173\\Desktop\\TI\\cat.mp4");也可以打开视频。

        (4)如果 capVideo.open(0)则打开默认摄像头,参数0为摄像头的id。

        (5)OpenCV可以读取本地视频文件,摄像头,及连续的图像文件。

        (6)VideoCapture 类是 OpenCV 中用于捕获视频数据的类。

        (7)VideCapture为opencv定义的视频数据的类,实际是底层对ffmpeg的封装实现的。
   

二、get 函数用于查询或获取 VideoCapture 对象的特定属性:

(1)函数原型:

       

 CV_WRAP virtual double get(int propId) const;
(2)参数propId

        属性标识符,可以是 cv::VideoCaptureProperties 枚举中的一个值(例如,cv::CAP_PROP_POS_MSECcv::CAP_PROP_POS_FRAMES 等),或者是 @ref videoio_flags_others 中定义的其他标志。

(3)VideoCaptureProperties 枚举:
  • CAP_PROP_POS_MSEC:视频文件的当前位置(毫秒)。
  • CAP_PROP_POS_FRAMES:下一个要解码/捕获的帧的0-based索引。
  • CAP_PROP_POS_AVI_RATIO:视频文件的相对位置:0=电影开始,1=电影结束。
  • CAP_PROP_FRAME_WIDTH:视频流中帧的宽度。
  • CAP_PROP_FRAME_HEIGHT:视频流中帧的高度。
  • CAP_PROP_FPS:帧率。
  • CAP_PROP_FOURCC:编解码器的4字符代码,查看 VideoWriter::fourcc
  • CAP_PROP_FRAME_COUNT:视频文件中的帧数。
  • CAP_PROP_FORMATVideoCapture::retrieve() 返回的 %Mat 对象的格式(见 Mat::type())。设置为 -1 可获取未解码的 RAW 视频流(作为 Mat 8UC1)。
  • CAP_PROP_MODE:后端特定的值,表示当前捕获模式。
  • CAP_PROP_BRIGHTNESS:图像的亮度(只对支持的相机有效)。
  • CAP_PROP_CONTRAST:图像的对比度(只对相机有效)。
  • CAP_PROP_SATURATION:图像的饱和度(只对相机有效)。
  • CAP_PROP_HUE:图像的色调(只对相机有效)。
  • CAP_PROP_GAIN:图像的增益(只对支持的相机有效)。
  • CAP_PROP_EXPOSURE:曝光(只对支持的相机有效)。
  • CAP_PROP_CONVERT_RGB:布尔标志,指示是否应将图像转换为 RGB。
  • CAP_PROP_WHITE_BALANCE_BLUE_U:目前不支持。
  • CAP_PROP_RECTIFICATION:立体相机的校正标志(目前仅 DC1394 v 2.x 后端支持)。
  • CAP_PROP_MONOCHROME:单色。
  • CAP_PROP_SHARPNESS:锐度。
  • CAP_PROP_AUTO_EXPOSURE:相机自动曝光控制,用户可以使用此功能调整参考级别。
  • CAP_PROP_GAMMA:伽马校正。
  • CAP_PROP_TEMPERATURE:温度。
  • CAP_PROP_TRIGGER:触发。
  • CAP_PROP_TRIGGER_DELAY:触发延迟。
  • CAP_PROP_WHITE_BALANCE_RED_V:红色通道的白平衡。
  • CAP_PROP_ZOOM:缩放。
  • CAP_PROP_FOCUS:对焦。
  • CAP_PROP_GUID:全局唯一标识符。
  • CAP_PROP_ISO_SPEED:ISO 速度。
  • CAP_PROP_BACKLIGHT:逆光补偿。
  • CAP_PROP_PAN:水平旋转。
  • CAP_PROP_TILT:垂直倾斜。
  • CAP_PROP_ROLL:翻滚。
  • CAP_PROP_IRIS:光圈。
  • CAP_PROP_SETTINGS:弹出视频/相机过滤器对话框(目前仅 DSHOW 后端支持)。
  • CAP_PROP_BUFFERSIZE:缓冲区大小。
  • CAP_PROP_AUTOFOCUS:自动对焦。
  • CAP_PROP_SAR_NUM:样本纵横比的分子。
  • CAP_PROP_SAR_DEN:样本纵横比的分母。
  • CAP_PROP_BACKEND:当前后端(枚举 VideoCaptureAPIs)。只读属性。
  • CAP_PROP_CHANNEL:视频输入或信道号(只对支持的相机有效)。
  • CAP_PROP_AUTO_WB:启用/禁用自动白平衡。
  • CAP_PROP_WB_TEMPERATURE:白平衡色温。
  • CAP_PROP_CODEC_PIXEL_FORMAT:编解码器的像素格式(只读)。
  • CAP_PROP_BITRATE:视频比特率(只读)。
  • CAP_PROP_ORIENTATION_META:帧旋转(由流元数据定义,仅适用于 FFmpeg 和 AVFoundation 后端)。
  • CAP_PROP_ORIENTATION_AUTO:如果为 true,则根据视频文件的元数据旋转输出帧(适用于 FFmpeg 和 AVFoundation 后端)。
  • CAP_PROP_HW_ACCELERATION:硬件加速类型(见 VideoAccelerationType)。
  • CAP_PROP_HW_DEVICE:硬件设备索引。
  • CAP_PROP_HW_ACCELERATION_USE_OPENCL:如果非零,则创建新的 OpenCL 上下文并将其绑定到当前线程。
  • CAP_PROP_OPEN_TIMEOUT_MSEC:打开视频捕获的超时时间(毫秒)。
  • CAP_PROP_READ_TIMEOUT_MSEC:从视频捕获中读取的超时时间(毫秒)。
  • CAP_PROP_STREAM_OPEN_TIME_USEC:自1970年1月1日以来流打开的时间(微秒)。
  • CAP_PROP_VIDEO_TOTAL_CHANNELS:视频通道总数。
  • CAP_PROP_VIDEO_STREAM:指定视频流的索引。
  • CAP_PROP_AUDIO_STREAM:在多语言媒体文件中指定流。
  • CAP_PROP_AUDIO_POS:音频位置(样本数)。
  • CAP_PROP_AUDIO_SHIFT_NSEC:音频流和视频流之间的时间差(纳秒)。
  • CAP_PROP_AUDIO_DATA_DEPTH:位深的替代定义。
  • CAP_PROP_AUDIO_SAMPLES_PER_SECOND:音频样本率。
  • CAP_PROP_AUDIO_BASE_INDEX:第一个音频通道的索引。
  • CAP_PROP_AUDIO_TOTAL_CHANNELS:选定音频流中的音频通道数。
  • CAP_PROP_AUDIO_TOTAL_STREAMS:音频流总数。
  • CAP_PROP_AUDIO_SYNCHRONIZE:启用音频同步。
  • CAP_PROP_LRF_HAS_KEY_FRAME:最后原始帧是否包含关键帧的数据。
  • CAP_PROP_CODEC_EXTRADATA_INDEX:返回额外数据的索引。
  • CAP_PROP_FRAME_TYPE:最近读取帧的类型。
  • CAP_PROP_N_THREADS:设置最大线程数。
(4)返回值:函数返回指定属性的值。
  • 如果查询的属性不被 VideoCapture 实例使用的后端支持,则返回 0。

三、示例代码: 

#include <opencv2/core/utils/logger.hpp>//隐藏日志
#include <opencv2/highgui/highgui_c.h>
#include<opencv2/opencv.hpp>
#include <opencv2/videoio.hpp>
#include <opencv2/objdetect.hpp>
#include<iostream>
using namespace std;
using namespace cv;

int main() //int main(int argc, char** argv)通过OpenCV读取视频
{
	utils::logging::setLogLevel(utils::logging::LOG_LEVEL_SILENT);
	cout << "-----------start to read Video-------------" << endl;

	//也可以使用capVideo.open("C:\\Users\\86173\\Desktop\\TI\\cat.mp4");
	VideoCapture capVideo("C:\\Users\\86173\\Desktop\\TI\\cat.mp4");

    //读取视频的一些属性,更多参数可参考videoio_c.h中得定义
	cout << "parameters" << endl;
	//视频流中帧的宽度
    cout << "width:" << capVideo.get(CAP_PROP_FRAME_WIDTH) << endl;
    //视频流中帧的高度
	cout << "heigth:" << capVideo.get(CAP_PROP_FRAME_HEIGHT) << endl;
    //视频文件中的帧数
	cout << "frames:" << capVideo.get(CAP_PROP_FRAME_COUNT) << endl;
	cout << "fps:" << capVideo.get(CAP_PROP_FPS) << endl;//帧率

	if (!capVideo.isOpened()) {//用于检查视频捕获设备或文件是否已经成功打开
		cout << "Unable to open video!" << endl;
		return -1;
	}
	
	Mat frame;  //视频序列中的单个图像或视频帧,即逐帧读取视频
	while (capVideo.read(frame)) {  
		// 检查帧是否正确读取
		if (frame.empty()) {
			break;
		
		}

		//在这里处理帧(例如显示帧)显示视频
		imshow("Video Frame", frame);

		if (waitKey(30) == 'q') {
			break; // 如果用户按下 'q',则退出循环
		}
	}	

	capVideo.release();// 释放 VideoCapture 资源

	return 0;
}

四、运行结果:

(该视频时长:frames/fps=3.73s)

  • 14
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值