Python cvCaptureFromCAM(CV\u CAP\u ANY)返回NULL 我有一段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; }
Python cvCaptureFromCAM(CV\u CAP\u ANY)返回NULL 我有一段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; },python,c++,opencv,Python,C++,Opencv,/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++代码中读取我的
/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++代码中读取我的网络摄像头?< /P>
更新:
我将OpenCV升级到2.4.8,并再次编译C++代码。 输出仍然为空,因为它显示了一些错误消息:
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
我看到它说,“设备/资源正忙”…我认为您正在其他地方使用网络摄像头…例如。skype等。否则请尝试使用以下代码: 尝试使用(1)而不是(0)
上述代码为C++格式,如果您想获得IPLIGION,可以添加以下行将“在MAT格式”中的“框架”转换为IPLIMAGE *格式
IplImage* img = new IplImage(frame);
cvShowImage("IplImage format webcam", img);
然后我重新启动了系统,问题就解决了。嗯…默认情况下,当您将相机连接到linux系统时,一个名为“运动”的过程将使其处于占用状态。 你必须杀了它。以下命令将查找并终止“运动” sudo killall-9运动 执行此操作后,我想您的代码将正常工作。如果你解决了,请分享。
谢谢我想问题在于我在回答中提到的某个地方您的网络摄像头很忙。如果你同意,请接受答案:)是的,也许你是对的。非常感谢。但是我想知道设备是否忙,为什么python代码可以工作?我不知道。python代码可以正常工作,我想我没有其他使用网络摄像头的程序在运行。好吧……但我也收到了相同的错误,发现我的网络摄像头在另一个应用程序中很忙。谢谢你,但我几年前就做过这件事,现在无法重现:(非常感谢!
VideoCapture cap(1);
for(;;)
{
Mat frame;
cap >> frame;
imshow("My webcam", frame);
}
IplImage* img = new IplImage(frame);
cvShowImage("IplImage format webcam", img);