std::thread openVideo1(openVideoTask, video, scamera1 + 700);
std::thread openVideo2(openVideoTask, video2, scamera2 + 700);
openVideo1.join();
openVideo2.join();
static void openVideoTask(cv::VideoCapture &videoCap,int index){
if (videoCap.open(index)){
cv::Mat tmpFrame;
videoCap.read(tmpFrame);
}
}
打开摄像头总是失败,把代码都放在主线程中执行,则可正常打开
#include
using namespace std;
int main()
{
//initialize and allocate memory to load the video stream from camera
cv::VideoCapture camera0(1);
camera0.set(CV_CAP_PROP_FRAME_WIDTH,320);
camera0.set(CV_CAP_PROP_FRAME_HEIGHT,240);
cv::VideoCapture camera1(0);
camera1.set(CV_CAP_PROP_FRAME_WIDTH,320);
camera1.set(CV_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 sequentially
cv::Mat frame0;
camera0 >> frame0;
cv::Mat frame1;
camera1 >> frame1;
cv::imshow("left", frame0);
cv::imshow("right", frame1);
// std::cout << frame1.rows() << std::endl;
//wait for 40 milliseconds
int c = cvWaitKey(40);
//exit the loop if user press "Esc" key (ASCII value of "Esc" is 27)
if(27 == char(c))
break;
}
return 0;
}