我正在测试我发现的一些用于捕获网络摄像头视频流的代码,它与我以前为实现相同目的所做的完全不同,但它应该是合适的方式
这是我曾经做的的方式:
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);
}
我没有收到第一个错误行,所以它应该是打开相机,但总是无法抓取相机帧。
最佳答案
您可能在 while 循环中遗漏了右括号。还要确保在 while
循环之外创建 namedWindow
。在每次迭代中创建窗口是昂贵的。见下文:
VideoCapture camera;
camera.open(cameraNumber);
namedWindow("output");
if (!camera.isOpened()) {
cerr << "ERROR: Could not access the camera or video!" <<endl;
return -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;
return -1;
}
imshow("output", cameraFrame);
waitKey(10);
}
关于c++ - 从 Opencv 捕获网络摄像头视频,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18643543/