我正在使用OpenCV 3.0和Qt 5.5.0,使用MinGW 4.9.2作为编译器。每次使用int初始化cv :: VideoCapture时,都会导致段错误。以下是我能想到的相关信息。
OpenCVViewer.h
#pragma once
#include <QWidget>
#include <QTimer>
#include <opencv2/opencv.hpp>
class OpenCVViewer : public QWidget
{
Q_OBJECT
public:
OpenCVViewer(QWidget *parent = 0);
public slots:
void display_scene();
protected:
void paintEvent(QPaintEvent *event) Q_DECL_OVERRIDE;
private:
QImage render_img; /// Qt image to be rendered
cv::Mat original_img; /// original OpenCV image to be shown
bool showImage( cv::Mat image ); /// Used to set the image to be viewed
QTimer *timer;
cv::VideoCapture cap;
};
OpenCVViewer.cpp
#include "OpenCVViewer.h"
#include <QtWidgets>
#include <opencv2/opencv.hpp>
#include <stdexcept>
OpenCVViewer::OpenCVViewer(QWidget *parent) :
QWidget(parent),
cap(0)
{
timer = new QTimer(this);
QObject::connect(timer, SIGNAL(timeout()), this, SLOT(display_scene()));
if (!cap.isOpened()) // if not success, throw exception
{
throw std::runtime_error("Cannot open the web cam");
}
timer->start(30);
}
/** Rest of file not included */
Qt .pro文件。 OpenCV是用MinGW 4.9.2编译的。
QT += core gui
greaterThan(QT_MAJOR_VERSION, 4): QT += widgets
TARGET = Humanactivity
TEMPLATE = app
SOURCES += main.cpp\
mainwindow.cpp \
OpenCVViewer.cpp
HEADERS += mainwindow.h \
OpenCVViewer.h
FORMS += mainwindow.ui
win32: LIBS += -L$$PWD/../lib/opencv/build/mingw32/bin/ -lopencv_calib3d300 \
-lopencv_core300 \
-lopencv_features2d300 \
-lopencv_flann300 \
-lopencv_highgui300 \
-lopencv_imgcodecs300 \
-lopencv_imgproc300 \
-lopencv_ml300 \
-lopencv_objdetect300 \
-lopencv_photo300 \
-lopencv_shape300 \
-lopencv_stitching300 \
-lopencv_superres300 \
-lopencv_video300 \
-lopencv_videoio300 \
-lopencv_videostab300 \
-lopencv_ffmpeg300
INCLUDEPATH += $$PWD/../lib/opencv/build/include
DEPENDPATH += $$PWD/../lib/opencv/build/include
堆栈跟踪
0 QEdit!DllRegisterServer 0x14006cda
1 videoInput :: start(int, videoDevice *)0x6bd84c6b
2 videoInput :: setup(int)0x6bd848be
3 cv :: VideoCapture_DShow :: open(int)0x6bd8bfd5
4 cv :: VideoCapture_DShow :: VideoCapture_DShow(int)0x6bd8c0b5
5 cv :: VideoCapture :: open(int)0x6bd89e86
6 cv :: VideoCapture :: VideoCapture(int)0x6bd8a2b7
7 ?? 0x401901
8 ?? 0x403d22
9 ?? 0x4016f7
10 ?? 0x401647
11 ?? 0x4032f2
12 ?? 0x404cfd
13 ?? 0x4013de
14 KERNEL32!BaseThreadInitThunk 0x7557337a
15 ntdll!RtlInitializeExceptionChain 0x779f9882
16 ntdll!RtlInitializeExceptionChain 0x779f9855 17 ??