我正在测试一些我发现的用于捕获网络摄像头视频流的代码,它与我以前为实现相同目标所做的完全不同,但它应该是实现它的适当方式。
这是我以前做的方式:
CvCapture* capture;
IplImage* frame = 0;
while (true)
{
//Read the video stream
capture = cvCaptureFromCAM(1);
if (! capture) break;
frame = cvQueryFrame(capture);
//Create a window to display
cvNamedWindow("Te estas viendo", CV_WINDOW_NORMAL|CV_WINDOW_KEEPRATIO);
cvShowImage("Te estas viendo", frame);
int c = cvWaitKey(10);
if ( (char)c == 27 ) break;
}
//Clean and release resources
cvReleaseImage(&frame);
cvDestroyAllWindows();
这是测试代码:
VideoCapture camera;
camera.open(cameraNumber);
if (!camera.isOpened()) {
cerr << "ERROR: Could not access the camera or video!" <<endl;
exit(1);
}
while (true) {
// Grab the next camera frame.
cv::Mat cameraFrame;
camera >> cameraFrame;
if (cameraFrame.empty()) {
std::cerr << "ERROR: Couldn't grab a camera frame." <<
std::endl;
exit(1);
}
我没有得到第一个错误行,所以它应该打开相机,但总是无法抓取相机帧。