Я бы попробовал открывать по очереди все камеры, до тех пор пока открываются. Как не открылась, так значит камеры кончились.))
int i=0;
CvCapture* cap;
while(cap=cvCaptureFromCAM(i++))
cvReleaseCapture(cap);[/codebox]
Как то так например. В i по хорошему должно остаться количество доступных камер.