[英]How to count cameras in OpenCV 2.3?
我想获得可用相机的数量。
我试着计算这样的相机:
for(int device = 0; device<10; device++)
{
VideoCapture cap(device);
if (!cap.isOpened())
return device;
}
如果我连接了相机,它永远不会打开。 所以我尝试预览不同的设备,但我总是得到相机的图像。
如果连接第二台摄像机,则设备0为摄像机1,设备1-10为摄像机2。
我认为DirectShow设备存在问题。
如何解决这个问题呢? 或者是否有像OpenCV1 cvcamGetCamerasCount()
的函数?
我正在使用Windows 7和USB相机。
即使这是一篇旧帖子,也是OpenCV 2 / C ++的解决方案
/**
* Get the number of camera available
*/
int countCameras()
{
cv::VideoCapture temp_camera;
int maxTested = 10;
for (int i = 0; i < maxTested; i++){
cv::VideoCapture temp_camera(i);
bool res = (!temp_camera.isOpened());
temp_camera.release();
if (res)
{
return i;
}
}
return maxTested;
}
在Windows 7 x64下测试:
有0到3个Usb相机
OpenCV仍然没有枚举相机或获取可用设备数量的API。 有关详细信息,请参阅OpenCV错误跟踪器上的此票证 。
VideoCapture的行为未定义为设备数量大于连接的设备数量,并且取决于用于与相机通信的API。 请参阅OpenCV 2.3(C ++,QtGui),问题初始化某些特定的USB设备和设置以获取OpenCV中使用的API列表。
这是一个非常古老的帖子,但我发现在Ubuntu 14.04和OpenCv 3上的Python 2.7下,这里没有任何解决方案适用于我。 相反,我在Python中提出了类似的东西:
import cv2
def clearCapture(capture):
capture.release()
cv2.destroyAllWindows()
def countCameras():
n = 0
for i in range(10):
try:
cap = cv2.VideoCapture(i)
ret, frame = cap.read()
cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
clearCapture(cap)
n += 1
except:
clearCapture(cap)
break
return n
print countCameras()
也许有人会觉得这很有用。
我在Python中这样做:
def count_cameras():
for i in range(10):
temp_camera = cv.CreateCameraCapture(i-1)
temp_frame = cv.QueryFrame(temp_camera)
del(temp_camera)
if temp_frame==None:
del(temp_frame)
return i-1 #MacbookPro counts embedded webcam twice
可悲的是,Opencv无论如何都打开了Camera对象,即使那里什么都没有,但是如果你试图提取它的内容,那么就没有什么可归于的了。 您可以使用它来检查您的相机数量。 它适用于我测试的每个平台,所以它很好。
返回i-1
的原因是MacBookPro计算了两次自己的嵌入式相机。
我也遇到过类似的问题。 我通过使用videoInput.h库而不是Opencv来枚举摄像机并将索引传递给Videocapture对象来解决了这个问题。 它解决了我的问题。
Python 3.6:
import cv2
# Get the number of cameras available
def count_cameras():
max_tested = 100
for i in range(max_tested):
temp_camera = cv2.VideoCapture(i)
if temp_camera.isOpened():
temp_camera.release()
continue
return i
print(count_cameras())
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.