断言失败(size.width> 0 && size.height> 0)

jyt*_*nto 18 c++ opencv visual-studio visual-c++

我2.4.7按照本教程使用Visual Studio Express 2013和OpenCV .

我花了几个小时在网上搜索解决方案,包括所有相关的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);        
    }

}
Run Code Online (Sandbox Code Playgroud)

当我编译并运行它时,我收到以下错误:

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);
}
Run Code Online (Sandbox Code Playgroud)

我们可以等待相机启动

Den*_*nis 16

我尝试了你的代码,对我而言它是可行的(它可视化当前的网络摄像头输入)!
我使用OpenCV 2.4.7在Visual Studio 2012 Ultimate上运行它.
...
出现错误是因为图像为空,请尝试以下操作:

while (true) {
    cap >> image;

    if(!image.empty()){
        imshow("window", image);
    }

// delay 33ms
waitKey(33);        
}
Run Code Online (Sandbox Code Playgroud)

也许您从网络摄像头收到的第一张图片是空的.在这种情况下,imshow不会抛出错误.所以希望下一个输入图像不是空的.