# VideoCapture **Repository Path**: mittacychen/VideoCapture ## Basic Information - **Project Name**: VideoCapture - **Description**: No description available - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2018-12-10 - **Last Updated**: 2020-12-19 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # VideoCaputer类 ##### !学过的网址 1:https://blog.csdn.net/frosuccess/article/details/79589778 2:https://blog.csdn.net/thefutureisour/article/details/7530344 3:https://blog.csdn.net/akay1997/article/details/76421757/ 4:https://blog.csdn.net/u010368556/article/details/79186992 5:https://blog.csdn.net/weicao1990/article/details/53379881 6:http://blog.csdn.net/guduruyu/article/details/68486063 7:https://blog.csdn.net/weixin_39916086/article/details/82827267 ##### 1.Opencv读入视频 ~~~ c++ VideoCapture类的构造函数: VideoCapture::VideoCapture(); VideoCapture::VideoCapture(const string& filename); VideoCapture::VideoCapture(int device); ~~~ ~~~ // 一 VideoCapture capture(); capture.open("test.mp4"); // 二 方法:VideoCapture::VideoCapture(const string& filename); 实例:VideoCapture capture("/Users/Mittacy/Study/AwakeLion/find_QR/test.mp4); // 三 方法:VideoCapture::VideoCapture(int device); 实例: VideoCapture capture(0); // 法一 Mat src; capture >> src; // 法二 Mat src; capture.read(src); ~~~ ##### 2.VideoCapture::isOpened() ~~~ bool VideoCapture::isOpened() // example VideoCapture capture("test.mp4"); if (!capture.isOpened()) { // } ~~~ ##### 3.VideoCapture::release() ~~~~ void VideoCapture::release() // example capture.release(); ~~~~ ##### 4.VideoCapture::grab() ~~~~~ bool VideoCapture::grab() // example ~~~~~ ##### 5.VideoCapture::retrieve() ~~~~ bool VideoCapture::retrieve(Mat& image, int channel=0) // 解码并且返回刚刚抓取的帧,假如没有视频帧被捕获(相机没有连接或者视频文件中没有更多的帧)将返回false // example ~~~~ ##### 6.VideoCapture::read() ~~~~ VideoCapture& VideoCapture::operator>>(Mat& image) bool VideoCapture::read(Mat& image) // 该函数结合VideoCapture::grab()和VideoCapture::retrieve()其中之一被调用,用于捕获、解码和返回下一个视频帧这是一个最方便的函数对于读取视频文件或者捕获数据从解码和返回刚刚捕获的帧,假如没有视频帧被捕获(相机没有连接或者视频文件中没有更多的帧)将返回false ~~~~ ##### 7.获取视频帧的方法汇总 ~~~ // 方法一: capture.read(frame); // 方法二 capture.grub(); // 方法三 capture.retrieve(frame); // 方法四 capture >> frame; ~~~ ##### 8.VideoCapture::get() ~~~~ double VideoCapture::get(int propId) // 一个视频有很多属性,比如:帧率、总帧数、尺寸、格式等,VideoCapture的get方法可以获取这些属性 ~~~~ ##### 9.VideoCapture::set() ~~~ bool VideoCapture::set(int propertyId, double value) // 功能:设置VideoCapture类的属性,设置成功返回ture,失败返回false // 第一个是属性ID,第二个是该属性要设置的值 属性值propertyId: ~~~ | param | define | | ----------------------------- | ------------------------------------------------------------ | | CV_CAP_PROP_POS_MSEC(0) | 视频文件的当前位置(播放)以毫秒为单位 | | CV_CAP_PROP_POS_FRAMES(1) | 基于以0开始的被捕获或解码的帧索引 | | CV_CAP_PROP_POS_AVI_RATIO(2) | 视频文件的相对位置(播放):0=电影开始,1=影片的结尾 | | CV_CAP_PROP_FRAME_WIDTH(3) | 在视频流的帧的宽度 | | CV_CAP_PROP_FRAME_HEIGHT(4) | 在视频流的帧的高度 | | CV_CAP_PROP_FPS Frame rate(5) | 帧速率 | | CV_CAP_PROP_FOURCC(6) | 编解码的4字-字符代码 | | CV_CAP_PROP_FRAME_COUNT(7) | 视频文件中的帧数 | | CV_CAP_PROP_FORMAT(8) | 返回对象的格式 | | CV_CAP_PROP_MODE(9) | 返回后端特定的值,该值指示当前捕获模式 | | CV_CAP_PROP_BRIGHTNESS(10) | 图像的亮度(仅适用于照相机) | | CV_CAP_PROP_CONTRAST(11) | 图像的对比度(仅适用于照相机) | | CV_CAP_PROP_SATURATION(12) | 图像的饱和度(仅适用于照相机) | | CV_CAP_PROP_HUE(13) | 色调图像(仅适用于照相机) | | CV_CAP_PROP_GAIN(14) | 图像增益(仅适用于照相机)(Gain在摄影中表示白平衡提升) | | CV_CAP_PROP_EXPOSURE(15) | 曝光(仅适用于照相机) | | CV_CAP_PROP_CONVERT_RGB(16) | 指示是否应将图像转换为RGB布尔标志 | | CV_CAP_PROP_WHITE_BALANCE | 暂时不支持 | | CV_CAP_PROP_RECTIFICATION(18) | 立体摄像机的矫正标注(目前只有DC1394 v.2.x后端支持这个功能) | ##### 10.摄像头参数修改例子 ~~~~ #include #include #include using namespace std; using namespace cv; int main() { char c = 0; //打开视频文件:其实就是建立一个VideoCapture结构 VideoCapture capture(0); //检测是否正常打开:成功打开时,isOpened返回ture if(!capture.isOpened()) cout<<"fail to open!"<> src; if (src.empty()) { cout << "can't load image..." << endl; } imshow("video", src); c = waitKey(30); if (c == 27) break; } capture.release(); return 0; } ~~~~ 发现很多参数不能更改,甚至获取不到,查阅 [7][https://blog.csdn.net/weixin_39916086/article/details/82827267] 链接知道可以通过修改opencv源文件highgui/src/cap_v4l.cpp文件,但是找不到cap_v4l.cpp