directshow同时打开两个USB摄像头,为什么只显示一个
//设置摄像机CCD1
void CScrewVCDlg::OnSetCcd1()
{
// TODO: Add your command handler code here
m_nCameraNum=CCameraDS::CameraCount();
if(m_nCameraType==CCD_NO)
{
AfxMessageBox("请选择正确的相机类型!");
}
else
{
if(m_nCameraType == CCD_USB && m_nCameraNum >=1)
{
m_clsInputImage[CCD1].OnStop();
m_clsInputImage[CCD2].OnStop();
cvNamedWindow("LeftCamera", 0);
HWND LeftCAM = (HWND) cvGetWindowHandle("LeftCamera");
HWND hParent1 = ::GetParent(LeftCAM);
::SetParent(LeftCAM, GetDlgItem(IDC_PIC_CCD1)->m_hWnd);
::ShowWindow(hParent1, SW_HIDE);
m_clsInputImage[CCD1].OnStart(CCD1,"");
if(m_camera1.OpenCamera(CCD1,true))
{
while(1)
{
//获取一帧
IplImage *pFrame1 = m_camera1.QueryFrame();
//显示
cvShowImage("LeftCamera", pFrame1);
cvWaitKey(10);
}
}
}
}
}
//设置摄像机CCD2
void CScrewVCDlg::OnSetCcd2()
{
// TODO: Add your command handler code here
m_nCameraNum=CCameraDS::CameraCount();
if(m_nCameraType==CCD_NO)
{
AfxMessageBox("请选择正确的相机类型!");
}
else
{
if(m_nCameraType == CCD_USB && m_nCameraNum ==2)
{
m_clsInputImage[CCD2].OnStop();
cvNamedWindow("RightCamera", 0);
HWND RightCAM = (HWND) cvGetWindowHandle("RightCamera");
HWND hParent2 = ::GetParent(RightCAM);
::SetParent(RightCAM, GetDlgItem(IDC_PIC_CCD2)->m_hWnd);
::ShowWindow(hParent2, SW_HIDE);
m_clsInputImage[CCD2].OnStart(CCD2,"");
if(m_camera2.OpenCamera(CCD2,true))
{
while(2)
{
//获取一帧
IplImage *pFrame2 = m_camera2.QueryFrame();
//显示
cvShowImage("RightCamera", pFrame2);
cvWaitKey(100);
}
}
}
}
}
这种方法能打开第一个,但打开第二个没有反应。