我无法使用以下OpenCV代码从我的网络摄像头捕获图像。
代码可以显示来自本地AVI文件或视频设备的图像。它在“test.avi”文件中工作正常。
当我使用我的默认网络摄像头(CvCapture * capture = cvCreateCameraCapture(0))时,程序可以从网络摄像头检测到图像的大小,但无法显示图像。
/ 我忘了提到我可以看到iSight正在工作,因为LED指示灯已开启 /
有人遇到同样的问题吗?
cvNamedWindow( "Example2", CV_WINDOW_AUTOSIZE );
CvCapture* capture =cvCreateFileCapture( "C:\\test.avi" ) ;// display images from avi file, works well
// CvCapture* capture =cvCreateCameraCapture(0); //display the frame(images) from default webcam not work
assert( capture );
IplImage* image;
while(1) {
image = cvQueryFrame( capture );
if( !image ) break;
cvShowImage( "Example2", image );
char c = cvWaitKey(33);
if( c == 27 ) break;
}
cvReleaseCapture( &capture );
cvDestroyWindow( "Example2" );
答案 0 :(得分:3)
我正在使用Macbook pro Mid 2012开启opencv 2.3,我遇到了Isight cam的问题。不知何故,我设法通过简单地调整Cvcapture的参数并调整框架宽度和高度来使其在opencv上工作:
CvCapture* capture = cvCaptureFromCAM(0);
cvSetCaptureProperty( capture, CV_CAP_PROP_FRAME_WIDTH, 500 );
cvSetCaptureProperty( capture, CV_CAP_PROP_FRAME_HEIGHT, 600 );
您也可以将这些数字更改为您想要的帧宽和高度。
答案 1 :(得分:1)
您是否尝试过opencv page?
中的示例即,
#include "cv.h"
#include "highgui.h"
using namespace cv;
int main(int, char**)
{
VideoCapture cap(0); // open the default camera
if(!cap.isOpened()) // check if we succeeded
return -1;
Mat edges;
namedWindow("edges",1);
for(;;)
{
Mat frame;
cap >> frame; // get a new frame from camera
cvtColor(frame, edges, CV_BGR2GRAY);
GaussianBlur(edges, edges, Size(7,7), 1.5, 1.5);
Canny(edges, edges, 0, 30, 3);
imshow("edges", edges);
if(waitKey(30) >= 0) break;
}
// the camera will be deinitialized automatically in VideoCapture destructor
return 0;
}
在我的MacBook Pro上工作(虽然在OS X上)。如果它不起作用,某种错误信息会有所帮助。
答案 2 :(得分:1)
试试这个:
int main(int, char**) {
VideoCapture cap(0); // open the default camera
if (!cap.isOpened()) { // check if we succeeded
cout << "===couldn't open camera" << endl;
return -1;
}
Mat edges, frame;
frame = cv::Mat(10, 10, CV_8U);
namedWindow("edges", 1);
for (;;) {
cap >> frame; // get a new frame from camera
cout << "frame size: " << frame.cols << endl;
if (frame.cols > 0 && frame.rows > 0) {
imshow("edges", frame);
}
if (waitKey(30) >= 0)
break;
}
// the camera will be deinitialized automatically in VideoCapture destructor
return 0;
}
答案 3 :(得分:0)
最新更新!问题解决了!
这恰好是OpenCV 2.2的错误之一
以下是修复方法:
http://dusijun.wordpress.com/2011/01/11/opencv-unable-to-capture-image-from-isight-webcam/
答案 4 :(得分:-1)
为什么不试试
capture=cvCaptureFromCam(0);
我认为这可行。
让我知道它的工作与否。