买了一个双目摄像头,只有一个usb口那种,支持两路设备识别和输出,我单独调用任何一路都能输出图像,但是同时调用两路显示时,第二路总是打不开,有没有哪个大佬遇到过相似的问题?怎么解决的呢?
附上我的代码:
#include
#include
using namespace cv;
using namespace std;
int main()
{
//【1】从摄像头读入视频
VideoCapture capture(2);
if(!capture.isOpened())
{cout<< "cannot open the camera.";cin.get();return -1;}
VideoCapture capture1(1);
if (!capture1.isOpened())
{
cout << "cannot open the camera1."; cin.get(); return -1;
}
while (1)
{
Mat frame; //定义一个Mat变量,用于存储每一帧的图像
Mat frame1; //定义一个Mat变量,用于存储每一帧的图像
capture >> frame; //读取当前帧
if (frame.empty())
{
printf("--(!) No captured frame -- Break!");
//break;
}
else
{
imshow("原图", frame); //显示当前帧
}
capture1 >> frame1; //读取当前帧
if (frame1.empty())
{
printf("--(!) No captured frame1 -- Break\r\n");
//break;
}
else
{
imshow("原图1", frame1); //显示当前帧
}
waitKey(30); //延时30ms
}
return 0;
}
楼主这个问题问得让人费解啊
你说的设备是一个双目摄像头,一个USB输出,那这样的情况数据肯定是串行出来的,你能够单独调出每一路的视频截图,这说明这个设备是正常工作的。
那么现在问题来了,你希望同时看到两路视频,这两路为什么不能采用分别调用的方式来解决呢?
从你的代码看,前面的定义mat做完,后面的catpture就有了一个先后之分,你声明的时候干脆一起声明啊,缩进也不一样,这个结构体不知道能不能正常实现你想表达的意思。
我不太明白您的意思,我这样改了只有也还是不行啊:
int main()
{
VideoCapture capture(2),capture1(1);
if (!capture.isOpened())
{ cout << "cannot open the camera."; cin.get(); return -1; }
if (!capture1.isOpened())
{ cout << "cannot open the camera1."; cin.get(); return -1;}
while (1)
{
Mat frame,frame1;
capture >> frame;
if (frame.empty())
{
printf("--(!) No captured frame -- Break!");
}
else
{
imshow("原图", frame);
}
capture1 >> frame1;
if (frame1.empty())
{
printf("--(!) No captured frame1 -- Break\r\n");
}
else
{
imshow("原图1", frame1);
}
waitKey(30);
}
return 0;
}