OpenCV VideoCapture 設置和獲取攝像頭參數


適用於VideoCapture打開的攝像頭

VideoCapture capture(0);

設置攝像頭參數 不要隨意修改

1 capture.set(CV_CAP_PROP_FRAME_WIDTH, 1080);//寬度 
2 capture.set(CV_CAP_PROP_FRAME_HEIGHT, 960);//高度
3 capture.set(CV_CAP_PROP_FPS, 30);//幀率 幀/秒
4 capture.set(CV_CAP_PROP_BRIGHTNESS, 1);//亮度 1
5 capture.set(CV_CAP_PROP_CONTRAST,40);//對比度 40
6 capture.set(CV_CAP_PROP_SATURATION, 50);//飽和度 50
7 capture.set(CV_CAP_PROP_HUE, 50);//色調 50
8 capture.set(CV_CAP_PROP_EXPOSURE, 50);//曝光 50

獲取攝像頭參數

1 capture.get(CV_CAP_PROP_FRAME_WIDTH); 2 capture.get(CV_CAP_PROP_FRAME_HEIGHT); 3 capture.get(CV_CAP_PROP_FPS); 4 capture.get(CV_CAP_PROP_BRIGHTNESS); 5 capture.get(CV_CAP_PROP_CONTRAST); 6 capture.get(CV_CAP_PROP_SATURATION); 7 capture.get(CV_CAP_PROP_HUE); 8 capture.get(CV_CAP_PROP_EXPOSURE);

 

源代碼

 1 /**  2 @brief OpenCV攝像頭和視頻屬性操作  3 @author  4 @copyright -  5 @version 1.0  6 @data  7 @note -  8 */
 9 #include <iostream>
 10 #include "opencv2/opencv.hpp"
 11  
 12 using namespace std;  13 using namespace cv;  14  
 15 const string window_name = "用戶界面";  16  
 17 #define USE_CAMERA
 18 //#define USE_VIDEO
 19  
 20 int main()  21 {  22  Mat frame;  23     
 24     double brightness = 0;        //亮度
 25     double contrast = 0;        //對比度
 26     double saturation = 0;        //飽和度
 27     double hue = 0;                //色調
 28     double gain = 0;            //增益
 29     double exposure = 0;        //曝光
 30     double white_balance = 0;    //白平衡
 31  
 32     double pos_msec = 0;        //當前視頻位置(ms)
 33     double pos_frame = 0;        //從0開始下一幀的索引
 34     double pos_avi_ratio = 0;    //視頻中的相對位置(范圍為0.0到1.0)
 35     double frame_width = 0;        //視頻幀的像素寬度
 36     double frame_height = 0;    //視頻幀的像素高度
 37     double fps = 0;                //幀速率
 38     double frame_count = 0;        //視頻總幀數
 39     double video_duration = 0.00;    //視頻時長
 40     double format = 0;            //格式
 41  
 42 #ifdef USE_VIDEO  43     const string file_name = "201910915314.avi";  44  VideoCapture capture(file_name);  45     
 46     frame_width = capture.get(cv::CAP_PROP_FRAME_WIDTH);  47     frame_height = capture.get(cv::CAP_PROP_FRAME_HEIGHT);  48     fps = capture.get(cv::CAP_PROP_FPS);  49     frame_count = capture.get(cv::CAP_PROP_FRAME_COUNT);  50     format = capture.get(cv::CAP_PROP_FORMAT);  51     pos_avi_ratio = capture.get(cv::CAP_PROP_POS_AVI_RATIO);  52     video_duration = frame_count / fps;  53  
 54     cout << "---------------------------------------------" << endl;  55     cout << "視頻中的相對位置(范圍為0.0到1.0):" << pos_avi_ratio << endl;  56     cout << "視頻幀的像素寬度:" << frame_width << endl;  57     cout << "視頻幀的像素高度:" << frame_height << endl;  58     cout << "錄制視頻的幀速率(幀/秒):" << fps << endl;  59     cout << "視頻文件總幀數:" << frame_count << endl;  60     cout << "圖像的格式:" << format << endl;  61     cout << "視頻時長:" << video_duration << endl;  62     cout << "---------------------------------------------" << endl;  63 #endif // USE_VIDEO
 64  
 65 #ifdef USE_CAMERA  66     VideoCapture capture(0);  67     brightness = capture.get(cv::CAP_PROP_BRIGHTNESS);  68     contrast= capture.get(cv::CAP_PROP_CONTRAST);  69     saturation = capture.get(cv::CAP_PROP_SATURATION);  70     hue = capture.get(cv::CAP_PROP_HUE);  71     gain = capture.get(cv::CAP_PROP_GAIN);  72     exposure = capture.get(cv::CAP_PROP_EXPOSURE);  73     white_balance = capture.get(cv::CAP_PROP_WHITE_BALANCE_BLUE_U);  74     
 75     std::cout << "---------------------------------------------" << endl;  76     std::cout << "攝像頭亮度:" << brightness << endl;  77     std::cout << "攝像頭對比度:" << contrast << endl;  78     std::cout << "攝像頭飽和度:" << saturation << endl;  79     std::cout << "攝像頭色調:" << hue << endl;  80     std::cout << "攝像頭增益:" << gain << endl;  81     std::cout << "攝像頭曝光度:" << exposure << endl;  82     std::cout << "攝像頭白平衡:" << white_balance << endl;  83     std::cout << "---------------------------------------------" << endl;  84 #endif // USE_CAMERA
 85  
 86  namedWindow(window_name,WINDOW_AUTOSIZE);  87     while (capture.isOpened())  88  {  89         capture >> frame;  90  
 91 #ifdef USE_VIDEO  92         pos_msec = capture.get(cv::CAP_PROP_POS_MSEC);  93         pos_frame = capture.get(cv::CAP_PROP_POS_FRAMES);  94         pos_avi_ratio = capture.get(cv::CAP_PROP_POS_AVI_RATIO);  95         cout << "---------------------------------------------" << endl;  96         cout << "視頻文件中當前位置(ms):" << pos_msec << endl;  97         cout << "從0開始下一幀的索引:" << pos_frame << endl;  98         cout << "視頻中的相對位置(范圍為0.0到1.0):" << pos_avi_ratio << endl;  99         cout << "---------------------------------------------" << endl; 100 #endif // USE_VIDEO
101         
102  imshow(window_name, frame); 103         if (waitKey(60)==27) 104  { 105             break; 106  } 107  } 108  capture.release(); 109  destroyAllWindows(); 110     return 0; 111 }

打印結果:

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM