2

我一直在尝试在QtCreator中使用cv::VideoCapture::open("< path to video file >")(添加了opencv)。即使程序在“bebug 模式”(调试版本)下运行时没有错误,它在“发布模式”(发布版本)下也会出现以下运行时错误。

调试断言失败文件:f:/dd/vctools/crt_bld/self_x86/src/isctype.c 行:56 表达式:(unsigned)(c+1) <= 256

这是一个仅使用 cv::VideoCapture::open() [用于测试目的] 的简单程序

下面是 .pro 文件

QT       += core gui

greaterThan(QT_MAJOR_VERSION, 4): QT += widgets
TARGET = untitled
TEMPLATE = app
SOURCES += main.cpp\
        mainwindow.cpp   
HEADERS  += mainwindow.h   
FORMS    += mainwindow.ui   

INCLUDEPATH += C:/C/opencv/build/include
INCLUDEPATH += C:/C/opencv/build/include/opencv  

LIBS += C:/C/opencv/build/x86/vc10/lib/opencv_highgui240d.lib
LIBS += C:/C/opencv/build/x86/vc10/lib/opencv_highgui240.lib


LIBS += C:/C/opencv/build/x86/vc10/bin/opencv_highgui240d.dll
LIBS += C:/C/opencv/build/x86/vc10/bin/opencv_highgui240.dll

下面是头文件

#include <QMainWindow>
#include <opencv2/highgui/highgui.hpp>
#include <opencv2/core/core.hpp>

namespace Ui {
class MainWindow;
}

class MainWindow : public QMainWindow
{
    Q_OBJECT

public:
    explicit MainWindow(QWidget *parent = 0);
    ~MainWindow();

private:
    Ui::MainWindow *ui;
    cv::VideoCapture vcap;
};

下面是 .cpp 文件

#include "mainwindow.h"
#include "ui_mainwindow.h"

MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);
    vcap.open("C:/Users/ANURUDDHA/pedestrians/ThreePastShop2cor.mpg");
}

MainWindow::~MainWindow()
{
    delete ui;
}

当我将 anint作为参数传递给 cv::VideoCapture::open() [eg: vcap.open(0)] 时,它在调试和发布版本中运行时都没有错误,并成功打开网络摄像头。只有当我将字符串传递给参数时才会出现问题。

有人请对此有所了解。非常感谢。

4

2 回答 2

1

看起来您正在链接库的调试和发布版本(两次?)。这在过去给我造成了问题。尝试仅LIBS += C:/C/opencv/build/x86/vc10/bin/opencv_highgui240.dll用于发布版本和LIBS += C:/C/opencv/build/x86/vc10/bin/opencv_highgui240d.dll调试版本。

此外,0 与 NULL 相同。在断言失败之前,库可能会中止它正在做的任何事情(无论是调试还是发布)。您不应该在发布模式下遇到断言失败,但事实告诉我调试库已加载到您为发布模式编译的程序中。

编辑:

看起来有人已经在这里回答了你:http: //answers.opencv.org/question/15838/videocaptureopenqt-creatordebug-assertion-failed/

于 2013-07-10T16:47:06.680 回答
0

我想我找到了答案,尽管对我来说似乎有点模棱两可。无论如何,现在程序在发布模式下工作。希望这可能会以某种方式帮助某人。

我将 C:/C/opencv/build/x86/vc10/bin/ 中的 dll 文件复制到 Windows 系统文件夹。即 C:\Windows\SysWOW64。如果有人使用 32 位版本的 Windows,它应该是 System32。

于 2013-08-14T12:45:49.593 回答