【发布时间】:2014-02-07 18:47:45
【问题描述】:
我有一段c++代码:
#include <opencv/highgui.h>
#include <iostream>
int main()
{
CvCapture* capture = cvCaptureFromCAM(CV_CAP_ANY); //tried (0) too
if(capture == NULL)
std::cout<<"NULL"<<std::endl;
return 0;
}
并使用以下命令编译它:
g++ main.cpp `pkg-config opencv --cflags` `pkg-config opencv --libs`
./a.out 的结果是
NULL
我使用 OpenCV 2.4.2 和 Ubuntu 12.04
但我确信我的网络摄像头很好,因为以下 python 代码可以正常工作。
import cv2
cap = cv2.VideoCapture(0)
ret, frame = cap.read()
cv2.imshow('frame', frame) # it shows a correct image from the webcam
cv2.waitKey(0)
有人知道为什么我无法在 C++ 代码中读取我的网络摄像头吗?
更新:
然后我将 OpenCV 升级到 2.4.8 并再次编译 C++ 代码。 输出仍然为 NULL,但它显示了一些错误消息:
VIDIOC_QUERYMENU: Invalid argument
VIDIOC_QUERYMENU: Invalid argument
VIDIOC_QUERYMENU: Invalid argument
VIDIOC_QUERYMENU: Invalid argument
VIDIOC_QUERYMENU: Invalid argument
VIDIOC_QUERYMENU: Invalid argument
libv4l2: error setting pixformat: Device or resource busy
HIGHGUI ERROR: libv4l unable to ioctl S_FMT
libv4l2: error setting pixformat: Device or resource busy
libv4l1: error setting pixformat: Device or resource busy
HIGHGUI ERROR: libv4l unable to ioctl VIDIOCSPICT
NULL
【问题讨论】: