【发布时间】:2014-01-16 06:14:40
【问题描述】:
我正在使用 Visual Studio Express 2013 和 OpenCV 2.4.7,遵循此 tutorial。
我花了几个小时在网上搜索解决方案,包括所有相关的 SO 问题。我试过了:
VideoCapture::open的返回值为1将 waitKey() 延迟延长到 50 毫秒,然后再延长到 500 毫秒
设置窗口的尺寸
在 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,文件 ........\opencv\modules\highgui\src\window.cpp,行中断言失败 (size.width>0 && size.height>0) 261
错误发生在imshow("window", image); 行。当我评论它时,没有任何投诉。
更新:
为什么会发生这个错误的一个合理解释是我的网络摄像头需要时间才能启动,这就是为什么 image.empty() 最初为真,因此调用 abort() 函数来退出程序。
用代码
if (!image.empty()) {
imshow("window", image);
}
我们可以等待相机启动
【问题讨论】:
-
不要成为一个顽固分子或任何东西,但如果你把
namedWindow("xyz", CV_WINDOW_AUTOSIZE),它会更容易让你(以及后来,其他人)阅读和关注..来找你的问题,可以放在每一行之后设置断点,并告诉我问题到底发生在哪里..? -
已按要求编辑问题,如果有任何其他附加信息有帮助,请告诉我
-
曾以“xyz”为例。对于此示例,您应该输入“window”(t 是窗口的名称,因此在
namedWindow和imshow中应该相同。 -
检查您的网络摄像头设置是否有效。如果您使用 Skype 或其他网络摄像头软件,请检查它是否正常工作。
标签: c++ visual-studio visual-c++ opencv