再介绍一下我的开发环境Qt4.7.4+OpenCV2.3.1+VS2008,其实很简单,先在自己的QMainWindow子类里面声明如下变量:
- public:
- camCapture(QWidget *parent = 0, Qt::WFlags flags = 0);
- ~camCapture();
- protected:
- void paintEvent(QPaintEvent * e);
- private:
- Ui::camCaptureClass ui;
- cv::Mat frame;
- cv::VideoCapture capture;
- QImage *image;
- QTimer *timer;
- private slots:
- void nextFrame();
paintEvent函数是重载的,目的是为了更新绘图,在其定义中添加:
- void camCapture::paintEvent(QPaintEvent * e)
- {
- // 更新图像
- QPainter painter(this);
- painter.drawImage(QPoint(0, 12), *image);
- }
camCapture的构造函数里面添加如下初始化:
- // 初始化处理,建立QImage和frame的关联,开启定时器
- capture.open(-1);
- if (capture.isOpened())
- {
- capture >> frame;
- if (!frame.empty())
- {
- cv::cvtColor(frame, frame, CV_BGR2RGB);
- cv::flip(frame, frame, 1);
- image = new QImage((const unsigned char*)(frame.data), frame.cols, frame.rows, QImage::Format_RGB888);
- timer = new QTimer(this);
- timer->setInterval(30);
- connect(timer, SIGNAL(timeout()), this, SLOT(nextFrame()));