我正在使用Visual Studio Express 2013和OpenCV 2.4.7
,跟随tutorial .
我花了几个小时在网上搜索解决方案,包括所有相关的SO问题 . 我试过了:
-
VideoCapture::open
的返回值为1 -
将waitKey()延迟扩展到50ms,然后延长500ms
-
设置窗口的尺寸
-
在Visual C上创建另一个项目
-
打开现有图像而不是从相机读取(相同错误)
但没有运气,请帮忙!
这是我的代码:
#include <opencv/cv.h>
#include <opencv/highgui.h>
#include <iostream>
using namespace std;
using namespace cv;
int main() {
Mat image;
VideoCapture cap;
int camOpen = cap.open(CV_CAP_ANY);
namedWindow("window", CV_WINDOW_AUTOSIZE);
while (true) {
cap >> image;
imshow("window", image);
// delay 33ms
waitKey(33);
}
}
当我编译并运行它时,我收到以下错误:
OpenCV错误:cv :: imshow中的断言失败(size.width> 0 && size.height> 0),文件........ \ opencv \ modules \ highgui \ src \ window.cpp,第261行
imshow("window", image);
行发生错误 . 当我评论它时,没有抱怨 .
更新:
这个错误发生原因的合理解释是我的网络摄像头需要时间来启动,这就是为什么image.empty()最初是真的,因此调用abort()函数来退出程序 .
随着代码
if (!image.empty()) {
imshow("window", image);
}
我们可以等待相机启动
3 回答
我尝试了你的代码,对我来说它是有效的(它可视化当前的网络摄像头输入)!
我使用OpenCV 2.4.7在Visual Studio 2012 Ultimate上运行它 .
...
发生错误是因为图像为空,请尝试以下操作:
也许您从网络摄像头收到的第一张图片是空的 . 在这种情况下,imshow不会抛出错误 . 所以希望下一个输入图像不是空的 .
做这个:
或者您可以尝试更改此内容:
至
这样做肯定会对你有用 .