日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

同时读取两个USB摄像头采集

發布時間:2024/9/27 编程问答 23 豆豆
生活随笔 收集整理的這篇文章主要介紹了 同时读取两个USB摄像头采集 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

1.??OpenCV:VideoCapture同時打開兩個攝像頭

#include <opencv2/opencv.hpp> #include<iostream>using namespace cv; using namespace std;int main() {//initialize and allocate memory to load the video stream from cameraVideoCapture camera0(1);camera0.set(CAP_PROP_FRAME_WIDTH,320);camera0.set(CAP_PROP_FRAME_HEIGHT,240);VideoCapture camera1(0);camera1.set(CAP_PROP_FRAME_WIDTH,320);camera1.set(CAP_PROP_FRAME_HEIGHT,240);if( !camera0.isOpened() ) return 1;if( !camera1.isOpened() ) return 1;while(true) {//grab and retrieve each frames of the video sequentiallyMat3b frame0;camera0 >> frame0;Mat3b frame1;camera1 >> frame1;imshow("Video0", frame0);imshow("Video1", frame1);//std::cout << frame1.rows() << std::endl;//wait for 40 millisecondsint c = waitKey(20);//exit the loop if user press "Esc" key (ASCII value of "Esc" is 27)if(27 == char(c)) break;}return 0;}

[注]:
1. ?分辨率為320*240,能夠正常顯示,分辨率太高,只有一個攝像頭能正常顯示,另一個顯示灰度圖。原因是USB的帶寬有限。

2. 攝像頭的序號在opencv中是采用降序的形式,才能正確讀取多個攝像頭,否則就不能。

3. VideoCapture類有兩種用法,一種是VideoCapture(const string& filename)用來打開視頻文件,一種是VideoCapture(int device)用來打開設備。


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

適用于VideoCapture打開的攝像頭

VideoCapture capture(0);

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

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

獲取攝像頭參數

capture.get(CV_CAP_PROP_FRAME_WIDTH); capture.get(CV_CAP_PROP_FRAME_HEIGHT); capture.get(CV_CAP_PROP_FPS); capture.get(CV_CAP_PROP_BRIGHTNESS); capture.get(CV_CAP_PROP_CONTRAST); capture.get(CV_CAP_PROP_SATURATION); capture.get(CV_CAP_PROP_HUE); capture.get(CV_CAP_PROP_EXPOSURE);

源代碼

/** @brief OpenCV攝像頭和視頻屬性操作 @author @copyright - @version 1.0 @data @note - */ #include <iostream> #include "opencv2/opencv.hpp"using namespace std; using namespace cv;const string window_name = "用戶界面";#define USE_CAMERA //#define USE_VIDEOint main() {Mat frame;double brightness = 0; //亮度double contrast = 0; //對比度double saturation = 0; //飽和度double hue = 0; //色調double gain = 0; //增益double exposure = 0; //曝光double white_balance = 0; //白平衡double pos_msec = 0; //當前視頻位置(ms)double pos_frame = 0; //從0開始下一幀的索引double pos_avi_ratio = 0; //視頻中的相對位置(范圍為0.0到1.0)double frame_width = 0; //視頻幀的像素寬度double frame_height = 0; //視頻幀的像素高度double fps = 0; //幀速率double frame_count = 0; //視頻總幀數double video_duration = 0.00; //視頻時長double format = 0; //格式#ifdef USE_VIDEOconst string file_name = "201910915314.avi";VideoCapture capture(file_name);frame_width = capture.get(cv::CAP_PROP_FRAME_WIDTH);frame_height = capture.get(cv::CAP_PROP_FRAME_HEIGHT);fps = capture.get(cv::CAP_PROP_FPS);frame_count = capture.get(cv::CAP_PROP_FRAME_COUNT);format = capture.get(cv::CAP_PROP_FORMAT);pos_avi_ratio = capture.get(cv::CAP_PROP_POS_AVI_RATIO);video_duration = frame_count / fps;cout << "---------------------------------------------" << endl;cout << "視頻中的相對位置(范圍為0.0到1.0):" << pos_avi_ratio << endl;cout << "視頻幀的像素寬度:" << frame_width << endl;cout << "視頻幀的像素高度:" << frame_height << endl;cout << "錄制視頻的幀速率(幀/秒):" << fps << endl;cout << "視頻文件總幀數:" << frame_count << endl;cout << "圖像的格式:" << format << endl;cout << "視頻時長:" << video_duration << endl;cout << "---------------------------------------------" << endl; #endif // USE_VIDEO#ifdef USE_CAMERAVideoCapture capture(0);brightness = capture.get(cv::CAP_PROP_BRIGHTNESS);contrast= capture.get(cv::CAP_PROP_CONTRAST);saturation = capture.get(cv::CAP_PROP_SATURATION);hue = capture.get(cv::CAP_PROP_HUE);gain = capture.get(cv::CAP_PROP_GAIN);exposure = capture.get(cv::CAP_PROP_EXPOSURE);white_balance = capture.get(cv::CAP_PROP_WHITE_BALANCE_BLUE_U);std::cout << "---------------------------------------------" << endl;std::cout << "攝像頭亮度:" << brightness << endl;std::cout << "攝像頭對比度:" << contrast << endl;std::cout << "攝像頭飽和度:" << saturation << endl;std::cout << "攝像頭色調:" << hue << endl;std::cout << "攝像頭增益:" << gain << endl;std::cout << "攝像頭曝光度:" << exposure << endl;std::cout << "攝像頭白平衡:" << white_balance << endl;std::cout << "---------------------------------------------" << endl; #endif // USE_CAMERAnamedWindow(window_name,WINDOW_AUTOSIZE);while (capture.isOpened()){capture >> frame;#ifdef USE_VIDEOpos_msec = capture.get(cv::CAP_PROP_POS_MSEC);pos_frame = capture.get(cv::CAP_PROP_POS_FRAMES);pos_avi_ratio = capture.get(cv::CAP_PROP_POS_AVI_RATIO);cout << "---------------------------------------------" << endl;cout << "視頻文件中當前位置(ms):" << pos_msec << endl;cout << "從0開始下一幀的索引:" << pos_frame << endl;cout << "視頻中的相對位置(范圍為0.0到1.0):" << pos_avi_ratio << endl;cout << "---------------------------------------------" << endl; #endif // USE_VIDEOimshow(window_name, frame);if (waitKey(60)==27){break;}}capture.release();destroyAllWindows();return 0; }

3.?opencv 出現 “VIDIOC_STREAMON: No space left on device” 錯誤 解決方法

現象:

今天在用opencv python 打開雙攝像頭時報一個錯誤: VIDIOC_STREAMON: No space left on device,設備上沒有空間

1. 之前用opencv-3.2.0 版本沒有報這個問題,現在使用新版本opencv-3.4.2 就出現這個問題。

2. 把攝像頭的分辨率改小到320*240后可以正常使用雙攝像頭。

原因是:單個攝像頭占用了USB的全部帶寬。

解決方法:

在打開攝像頭時添加一個語句:

capture1.set(cv2.CAP_PROP_FOURCC, cv2.VideoWriter_fourcc(*"MJPG"))
?

代碼:

capture1 = cv2.VideoCapture(2) capture2 = cv2.VideoCapture(1)capture1.set(cv2.CAP_PROP_FOURCC, cv2.VideoWriter_fourcc(*"MJPG")) capture2.set(cv2.CAP_PROP_FOURCC, cv2.VideoWriter_fourcc(*"MJPG")) # setting resolution capture1.set(cv2.CAP_PROP_FRAME_WIDTH, 640) capture1.set(cv2.CAP_PROP_FRAME_HEIGHT, 480) capture2.set(cv2.CAP_PROP_FRAME_WIDTH, 640) capture2.set(cv2.CAP_PROP_FRAME_HEIGHT, 480) if (capture.isOpened())capture.release(); //decide whether capture is already opened; if so,close itcapture.open(0); //open the default cameracapture.set(CAP_PROP_FOURCC, VideoWriter::fourcc('M', 'J', 'P', 'G')) ;capture.set(CAP_PROP_FPS, 60);capture.set(CAP_PROP_FRAME_WIDTH, ImgWidth);capture.set(CAP_PROP_FRAME_HEIGHT, ImgHeight);

總結

以上是生活随笔為你收集整理的同时读取两个USB摄像头采集的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。