首页 > 其他分享 >基于opencv和QT的摄像头采集代码( GoQTtemplate3持续更新)

基于opencv和QT的摄像头采集代码( GoQTtemplate3持续更新)

时间:2022-12-22 12:34:42浏览次数:63  
标签:src QT GoQTtemplate3 opencv ui include MainWindow 摄像头

GoQTtemplate3是我为编写Linux下图像处理程序实现的框架,希望能够为大家解决Linux环境下桌面图像处理程序,提供一些帮助。




文中相关代码请参考:​​https://github.com/jsxyhelu/GOQTtemplate3​


一、基本环境构建


a、我们需要完整地安装QT。具体方法,是从网站上下载在线安装程序,并且直接安装



基于opencv和QT的摄像头采集代码( GoQTtemplate3持续更新)_QT




基于opencv和QT的摄像头采集代码( GoQTtemplate3持续更新)_#include_02


b、下载并且安装OpenCV


直接使用编译好的OpenCV类库



​sudo apt-get install libcv-dev
sudo apt-get install libopencv-dev​


全部成功后在QT中进行相关配置:

安装完成之后,opencv相关的头文件被安装到/usr/include目录中,该目录是linux默认头文件查找路径。

修改配置文件:

基于opencv和QT的摄像头采集代码( GoQTtemplate3持续更新)_图像处理_03

编写相关代码




​​#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <opencv2/core/core.hpp>
#include <opencv2/highgui/highgui.hpp>
#include <opencv2/imgproc/imgproc.hpp>
#include <QFileDialog>
using namespace cv;
MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent), ui(new Ui::MainWindow){ ui->setupUi(this);}
MainWindow::~MainWindow(){ delete ui;}
void MainWindow::on_pushButton_clicked()
{
//第3个参数表示查找文件时从哪个目录开始,如果为"."的话,表示从该工程目录开始查找,最后那个参数的过滤器的名字之间
//要用空格,否则识别不出来
QString img_name = QFileDialog::getOpenFileName( this, tr("Open Image"), ".",tr("Image Files(*.png *.jpg *.jpeg *.bmp)"));
//toAscii()返回8位描述的string,为QByteArray,data()表示返回QByteArray的指针,QByteArray为字节指针
//现在已改为toLatinl函数
Mat src = imread( img_name.toLatin1().data());
cvtColor( src, src, CV_BGR2RGB );
QImage img = QImage( (const unsigned char*)(src.data), src.cols, src.rows, QImage::Format_RGB888 );
ui->label->setPixmap( QPixmap::fromImage(img) );
img_name.clear();
}​​


实现以下效果:




基于opencv和QT的摄像头采集代码( GoQTtemplate3持续更新)_QT_04


注意,所有操作的目录都不要放在中文目录下面。能够正常显示出Lena,那么证明QT和OpenCV的环境都是配置正确了。


二、QT自己带的例子程序是重要参考



基于opencv和QT的摄像头采集代码( GoQTtemplate3持续更新)_QT_05



基于opencv和QT的摄像头采集代码( GoQTtemplate3持续更新)_QT_06



这段代码主要是基于QCamera实现了摄像头的抽象,由于是官方代码,实现过程中采用了较多的“信号、槽”的机制,还是很值的参考的。但是就图像处理这块而言,价值一般。



三、《qt5.9c++开发指南》例程序解析



基于opencv和QT的摄像头采集代码( GoQTtemplate3持续更新)_#include_07



基于opencv和QT的摄像头采集代码( GoQTtemplate3持续更新)_图像处理_08



这个程序最为重要的地方,就是实现了摄像头设备的枚举(当然QT官方的例子可能也实现了,但是不是非常明显);在图像采集这块,同样采用的是QCamera。这段代码还有 一个特点,就是实现了一个较为完善的界面模型。




基于opencv和QT的摄像头采集代码( GoQTtemplate3持续更新)_图像处理_09


​​//  创建  QCamera对象     
QCameraInfo curCameraInfo =QCameraInfo : :defaultCamera(); //获取缺省摄像头
ui - >comboCamera - >addItem(curCameraInfo.description()); //摄像头描述
ui - >comboCamera - >setCurrentIndex( 0); ​​


但是这段程序存在一个问题,就是只选择默认摄像头,实际上,我们需要获得的是所有摄像头,那么就必须对这段代码进行相关修改:

​​const QList      <QCameraInfo      > availableCameras       = QCameraInfo      :      :availableCameras();      
for ( const QCameraInfo &cameraInfo : availableCameras) {
ui - >comboCamera - >addItem(cameraInfo.description()); //摄像头描述
}
ui - >comboCamera - >setCurrentIndex( 0); ​​



基于opencv和QT的摄像头采集代码( GoQTtemplate3持续更新)_图像处理_10



这样将非常方便后面的操作。


四、结合OpenCV功能,编写 GoQTtemplate3




我们最终还是需要将OpenCV引入其中,因为这样才能够更方便我们进行图像处理操作。之前介




绍过的GoQTtemplate2



需要说明的地方是,为了将摄像头选择功能加入目前平台,需要添加QCameraInfo.h,这个前提




是在.pro文件中,添加




multimedia类库。



基于opencv和QT的摄像头采集代码( GoQTtemplate3持续更新)_图像处理_11


并且将初始化程序加入其中


基于opencv和QT的摄像头采集代码( GoQTtemplate3持续更新)_QT_12



同时,我们在打开摄像头的时候,也要根据选择来进行打开。



基于opencv和QT的摄像头采集代码( GoQTtemplate3持续更新)_#include_13


同时需要添加错误控制,每次打开摄像头之前关闭之前的摄像头。具体内容可以参考代码。


基于opencv和QT的摄像头采集代码( GoQTtemplate3持续更新)_QT_14


五、备注




a、在程序的配置过程中,非常容易出现错误的一个问题为::



基于opencv和QT的摄像头采集代码( GoQTtemplate3持续更新)_QT_15



/usr/bin/ld: cannot find -lxxx  这种情况是系统找不到对应的库文件,其中,-lxxx表示链接库文件 libxxx.so。


具体的解决方法是先用locat找到指定的lib文件,查看链接文件是否正确的指向了我们希望的lib,如果不是,用


 ln -sf */libxxx.so.x */libxxx.so 指令修改它。


连接以后,输入ldconfig来让动态链接库供系统共享。


比如


基于opencv和QT的摄像头采集代码( GoQTtemplate3持续更新)_图像处理_16



b、 如果出现 视频窗口是黑屏的,怎么回事?


在Vmware Workstation的“虚拟机”->“虚拟机设置”->“USB控制器”下,查看“USB兼容性”,如果当前是“USB2.0”就修改为“USB3.0”,反之就修改为“USB2.0”。然后再在“虚拟机”->“可移动设备”下重新连接Camera,最好重新启动下即可。



基于opencv和QT的摄像头采集代码( GoQTtemplate3持续更新)_QT_17



感谢阅读至此,希望有所帮助。




标签:src,QT,GoQTtemplate3,opencv,ui,include,MainWindow,摄像头
From: https://blog.51cto.com/jsxyhelu2017/5962539

相关文章

  • 快速阅读《QT5.9 c++开发指南》1
    目录:书共分为16章,每章涉及一个主题或Qt的功能模块,涵盖了Qt应用程序开发的主要功能模块。人民邮电出版社异步社区本书的页面提供的“样章下载”,可......
  • OpenCV和RTSP的综合研究
    一、RTSP是什么?用来干什么?RTSP(RealTimeStreamingProtocol),RFC2326,实时流传输协议,是TCP/IP协议体系中的一个应用层协议,由哥伦比亚大学、网景和RealNetworks公司提交的IETF......
  • AnswerOpenCV(0416)一周佳作欣赏
    2017年4月16日一周AnswerOpenCV佳作赏析1、HelloHowtosmoothedgeoftextinbinaryimage,basedonthreshold.Somethinglikeanti-aliasingbyopenCv?example......
  • qt的窗口
      1.窗口、字部件以及窗口类型(记得不牢固的)(1)#include<QtWidget>Widgets是在Qt中创建用户界面的主要元素。Widgets可以显示数据和状态信息,接收用户输入,并为应......
  • MQTT服务(C#)
    MQTT服务(C#)MQTT服务器(C#)开启MQTT服务器,需要用到库MQTTnet,使用VS2019企业版。右键管理Nuget包,搜索下载MQTTnet(3.0.16版本)并安装,Install-PackageMQTTNET,出现下列提示,......
  • Qt 操作QList程序莫名崩溃
    RT,QList是私有成员变量,在某个函数里面append或者clear,程序都会莫名崩溃,在“概要信息”提示“ProjectMESSAGE:Thisisnotabug,butaresultofusingQtinternals.Y......
  • MinGW编译OpenCV4.5(64位/32位通用,附编译完成包下载)
    前言因为本人经常用MinGW编译器,而且习惯用64位,但是上网搜索配置方法发现很多都是32位的,而且版本差距太大的话成功率的也不是很高,不知道是不是我自己的原因,然后在面向浏......
  • python安装opencv避坑
    用python安装opencv-python提示报:ModuleNotFoundError:Nomodulenamed‘skbuild’pip3install-ihttps://pypi.tuna.tsinghua.edu.cn/simplescikit-build Prob......
  • QT 开发快速入门
    本人qt业余,但有的时候要用到qt,而又没有系统的学习,用到哪里看哪里。环境:vs2012+qt-vsaddins+qt5.5  qt的按钮点击事件出发的基本要素:1.按钮触发函数为public......
  • QT 的 ModelView
     QApplicationa(argc,argv);  QDirModelmodel;  //QDirModel,  问文件目录树  QTreeViewtree;  QListViewlist;  QTableViewtable;//共......