我是OpenCV的新手,我想显示我的网络摄像头看到的OpenCV。我正在使用C编码语言。
我尝试过这段代码:
#include <stdio.h>
#include <cv.h> // Include the OpenCV library
#include <highgui.h> // Include interfaces for video capturing
int main()
{
cvNamedWindow("Window", CV_WINDOW_AUTOSIZE);
CvCapture* capture =cvCreateCameraCapture(-1);
if (!capture){
printf("Error. Cannot capture.");
}
else{
cvNamedWindow("Window", CV_WINDOW_AUTOSIZE);
while (1){
IplImage* frame = cvQueryFrame(capture);
if(!frame){
printf("Error. Cannot get the frame.");
break;
}
cvShowImage("Window",frame);
}
cvReleaseCapture(&capture);
cvDestroyWindow("Window");
}
return 0;
}
我的网络摄像头的指示灯亮起,但结果是一个完全灰色的窗口,没有图像。
你能帮助我吗?
答案 0 :(得分:7)
您需要添加
cvWaitKey(30);
到while
- 循环结束。
cvWaitKey(x) / cv::waitKey(x)
做了两件事:
-1
。cvNamedWindow()
创建窗口,或使用cvShowImage()
显示图像。 opencv新手的一个常见错误是通过视频帧循环调用cvShowImage()
,而不用cvWaitKey(30)
跟进每次抽奖。在这种情况下,屏幕上不显示任何内容,因为从未给予highgui处理来自cvShowImage()
的绘制请求的时间。
有关详细信息,请参阅What does OpenCV's cvWaitKey( ) function do?。