一年前有个项目,本打算用Qt+opencv+多线程来操作相机,苦于技术不到家,只好用QCamera来操作摄像头(QCamera提供的相机操作方法很局限,甚至无法直接获取每一帧图像)。一年后的今天,我又想起这回事,专门抽时间把这段代码写了出来,也算有始有终了~
环境:win10 + Qt5.9.0(编译器为MSVC2015-32bit) + opencv4.1.1(编译器为MSVC2015-32bit)
Qt+opencv环境配置的基本思路是:
1.安装Qt(推荐5.9.0-win32版本)。
2.从opencv官网下载合适Qt版本的opencv(推荐opencv4.1.1)。
3.使用cmake对opencv进行编译(也可以下载网上编译好的),编译时选择的编译器要和Qt的编译器一致。
4.环境变量的配置。
5.在Qt工程中导入opencv的库文件路径。
涉及的主要技术:
1.opencv相机基本操作。
2.Mat格式和QImage格式的互相转化。
3.Camera类的设计。
4.Qt多线程技术(利用QObejct::moveToThread(QThread* )实现)。
先看效果图:
整个工程共七个文件(mainwindow.ui文件很简单,不予展示):
1.Test.pro
#-------------------------------------------------
#
# Project created by QtCreator 2020-02-08T13:35:16
#
#-------------------------------------------------
QT += core gui
greaterThan(QT_MAJOR_VERSION, 4): QT += widgets
TARGET = Test
TEMPLATE = app
DEFINES += QT_DEPRECATED_WARNINGS
SOURCES += \
main.cpp \
mainwindow.cpp \
camera.cpp
HEADERS += \
mainwindow.h \
camera.h
FORMS += \
mainwindow.ui
include(d:\opencv411\opencv-4.1.1\build\install\opencv.pri)