《OpenCV3和Qt5计算机视觉应用开发》学习笔记

news2025/1/15 19:59:32
  • Qt Creator中使用opencv

在.pro文件中添加

INCLUDEPATH += D:\MajorSoftware\opencv\opencv\build\include
LIBS += D:\MajorSoftware\opencv\opencv\mingw_build\lib\libopencv_*.a

在这里插入图片描述

  • 一个插件就是一个简单的库,如.dll,可以在运行时加载和使用插件,以处理特定的任务。不是独立运行,而是依赖于使用它的应用程序。接口用来实现程序和插件之间的对话,等价的是纯虚函数类。一开始所有必须的函数都要包含在接口中。
  • 虚析构函数可以避免内存泄露
  • Qt Creator与工程项目内容不同步时,手动运行qmake
Q_OBJECT //存于所有Qt类中,以允许Qt特定的功能可用
Q_PLUGIN_METADATA(IID "com.amin.cvplugininterface")//需要一个插件的源代码中刚好出现一次,用于添加关于插件的元数据
Q_INTERFACES(CvPluginInterface)//用于声明插件中实现的接口
  • VideoCapture可以读取(存储在磁盘上的文件、捕获设备、相机或一段网络视频流)视频或图像序列。
VideoCapture video;
video.open("C:/a.mp4");
if(video.isopened()){
	Mat frame;
	while(true){
		if(video.read(frame)){
		//process the frame
		}else{
			break;
		}
	}
}
video.release();
  • 在Qt中使用视频流时,为防止GUI不更新,程序崩溃,需要在循环中添加以下代码,确保GUI和其他线程也会被处理
aApp->processEvents();
  • QGraphicsScene提供了用于操纵多个图形对象元素的所有方法
  • QGraphicsItem是场景中绘制的所有对象元素的基类,它包含各种方法和属性来处理每一个对象元素的绘制、与其他对象元素的冲突检测、鼠标单击以及其他事件。
函数名函数作用
alignment函数和setAlignment函数设置视图中场景的对齐方式
dragMode函数和setDragMode函数获取和设置视图的拖动模式
isInteractive函数和setInteractive函数允许检索和修改视图的交互行为
optimizationFlags函数、setOptimizationFlags函数、renderHints函数、setRenderHints函数、viewportUpdateMode函数和setViewportUpdateMode函数用来获取和设置与视图的性能和渲染质量有关的参数
dragMode设置为RubberBandDrag模式,那么rubberBandSelectionMode函数和setRubberBandSelectionMode函数用来设置视图的对象元素选择模式
sceneRect函数和setSceneRect函数用于获取和设置视图中场景的可视化区域
centerOn函数用来确保一个特定的点或对象元素位于视图的中心
ensureVisible函数将视图滚动到一个特定的区域(具有给定的边界)以确保它在视图中。该函数适用于点、矩形和图形对象元素。
fitInView函数与centerOn和ensureVisible十分类似同在于:该函数还可以缩放视图的内容以适应视图,并有一个给定的宽高比处理参数
itemAt函数检索视图中特定位置的对象元素
  • 模板匹配中的相似度比对方法参数
方法名作用
平方差和(TM_SQDIFF)适用于对比度较低的图像,例如在较为均匀的背景中查找目标物体
标准化平方差和(TM_SQDIFF_NORMED)适用于对比度较低的图像,但比TM_SQDIFF更加鲁棒,可以处理一定程度的光照变化
相关系数(TM_CCORR)适用于对比度较高的图像,例如在较为清晰的图像中查找目标物体
标准化相关系数(TM_CCORR_NORMED)适用于对比度较高的图像,但比TM_CCORR更加鲁棒,可以处理一定程度的光照变化
归一化交叉相关系数(TM_CCOEFF_NORMED)适用于对比度和光照变化较大的图像,可以处理一定程度的旋转和缩放变化
归一化相关系数(TM_CCOEFF)适用于对比度和光照变化较大的图像,但比TM_CCOEFF_NORMED更加敏感,可能会受到噪声的影响
  • 模板匹配:是一种基于图像相似度的方法,用于在给定的输入图像中查找一个已知的小图像模板。该算法的基本原理是在输入图像中滑动模板图像,通过计算输入图像中每个位置与模板图像的相似度,来确定模板在输入图像中的位置。
    我们仅利用原始像素内容来获取结果,以确定特定对象是否存在于图像的某一部分中。
  • 取决于设计方式不同,每个进程可能或不可能创建不同的进程以获得最优性能及响应性
  • 在Qt和GUI编程中,运行一个复杂且耗时的进程时,最好将实时任务和GUI更新任务分解到不同的线程中去。
多线程类名/函数名作用
QThreadQt框架中所有线程的基类
QThreadPool可用于管理线程,并且允许重用已有线程以实现新的功能,从而降低线程创建的成本
QRunnable可提供创建线程的另一种方法,这是Qt中所有runnable对象的基类
QMutex、QMutexLocker、QSemaphore、QWaitCondition、QReadLocker、QWrite-Locker和QWriteLocke这些类主要用于处理线程间的同步任务
QtConcurrentQtConcurrent是一个命名空间,可用于使用高级API创建多线程应用程序
Qfuture、QfutureWatcher、QFututeIterator和QFutureSynchronizer这些类与QtConcurrent命名空间共同使用,可以处理多线程及异步操作结果
  • 在多线程编程中,对于竞争条件问题,确保每个线程在访问和修改对象之前都要等待,直到轮到后执行,这类问题的解决方法称为访问序列化,多线程编程中,借助互斥锁来解决。互斥锁是一种保护和防止多个线程同时访问同一个对象实例的方法

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/415813.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

基于模型预测控制(MPC)的微电网调度优化的研究(Matlab代码实现)

💥💥💞💞欢迎来到本博客❤️❤️💥💥 🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。 ⛳️座右铭&a…

7针0.96寸OLED的HAL库代码(硬件SPI/全代码/stm32f1/CubeMX配置/包含有正负浮点数/100%一次点亮)

系列文章链接 HC-SR04超声波模块的使用 编码电机以及双电机驱动 4针 0.96OLED的使用 更多有意思的文章点击“我的主页” --------😐 更多有意思的视频 -----> B站 想要亿只独角兽 --------😐 前言 之前发布了一篇硬件I2C的0.96 OLED驱动代码&#…

全国计算机等级考试——二级JAVA完整大题题库【五十三道】

全国计算机等级考试二级 JAVA 题目内容 编写于2023.04.10 分为40道选择题和3道大题(大题是程序填空类型) 其中选择题只能进去做一次,一旦退出来则不可再进(注意!)。大题可以重复进入,重复做。…

JavaScript【七】JavaScript中的内置顶层函数

文章目录🌟前言🌟内置🌟顶层🌟内置顶层函数🌟 Number()🌟 parseInt()🌟parseFloat()🌟String()🌟Boolean()🌟 isNaN()🌟eval()🌟Numbe…

(详细)《美国节日》:某月的第几个星期几

目录 一、题目描述: 二、思路: 1、给定 年月日,如何知道这天是星期几? 2、已知这个月的第一天是星期几,如何知道第三个星期一是几号? 3、最后一个星期一 三、思路总结 四、代码 一、题目描述&#xf…

机器学习---集成学习报告

1.原理以及举例 1.1原理 集成学习(Ensemble Learning)是一种机器学习策略,它通过结合多个基学习器(base learners)的预测来提高模型的性能。集成学习的目标是创建一个比单个基学习器更准确、更稳定的最终预测模型。这…

力扣---LeetCode面试题17.04.消失的数字

文章目录前言面试题17.04.消失的数字方法一:方法二:异或解析:方法三:总结前言 我有我要赶去的远方,风雨兼程披星戴月 本章的内容是力扣每日随机一题的部分方法的解析 提示:以下是本篇文章正文内容&#xf…

安全防御 --- 恶意代码、防病毒

一、恶意代码 1、按照传播方式分类 (1)病毒 概念:病毒是一种基于硬件和操作系统的程序,具有感染和破坏能力,这与病毒程序的结构有关。病毒攻击的宿主程序是病毒的栖身地,它是病毒传播的目的地&#xff0…

2023.04.09 学习周报

文章目录摘要文献阅读1.题目2.摘要3.简介4.本文贡献5.传统方法6.IDLSTM-EC7.实验7.1 数据集7.2 基线7.3 评估指标7.4 实验结果8.结论9.展望MDS降维算法1.基本思想2.优化目标3.数学推导4.算法流程马尔可夫链1.随机过程2.简介3.数学定义4.转移概率矩阵5.状态转移矩阵的稳定性Navi…

Python 访问 PostgreSQL

文章目录一、前言1.1 概述1.2 什么是 Psycopg二、操作 PostgreSQL2.1 连接数据库2.2 异常处理2.3 创建表2.4 INSERT 操作2.5 SELECT 操作2.6 UPDATE 操作2.7 DELETE 操作2.8 事务管理2.9 调用存储函数2.10 批量操作一、前言 1.1 概述 Python 是一种高级、通用的解释型编程语言…

排序算法之希尔排序

📝个人主页:爱吃炫迈 💌系列专栏:数据结构与算法 🧑‍💻座右铭:快给我点赞赞💗 文章目录1. 希尔排序2. 算法思路3. 算法实现4. 算法性能分析💞总结💞1. 希尔排…

自己再造一个大规模预训练语言模型?可以的

1. 引言 自ChatGPT发布至今已近半年,一路走来,我们可以清楚地看到的一个趋势是,到了下半年,每位研究者都会拥有一个类似ChatGPT的模型。这种现象与当年BERT推出后,各种BERT变体层出不穷的情况颇为相似。实际上&#x…

Prophet学习(一) Python API实现

目录 Python API 详细介绍 完整代码: Python API 详细介绍 Prophet遵循sklearn模型API。我们创建Prophet类的实例,然后调用它的fit和predict方法。 Prophet的输入总是一个有两列的数据帧:ds和y。ds(日期戳)列应该是Pandas期望的格式,理想…

APIs --- DOM事件进阶

1. 事件流 事件流指的是事件完整执行过程中的流动路径 任意事件被触发时总会经历两个阶段:【捕获阶段】和【冒泡阶段】 事件捕获 概念:从DOM的根元素开始去执行对应的事件(从外到里) 捕获阶段是【从父到子】的传导过程 代码&…

基于SSM框架开发的小区物业管理系统JavaWeb项目源码

随着信息化时代的到来,小区的管理也日趋完善,开始逐步采用信息化系统对小区业主进行管理,对一些业务进行线上处理。小区物业管理系统正是为了满足这种需求而诞生的,也有不少同学会选择该课题作为毕业设计项目选题,下面…

【Unity入门】9.帧更新

【Unity入门】帧更新 大家好,我是Lampard~~ 欢迎来到Unity入门系列博客,所学知识来自B站阿发老师~感谢 (一)获取挂载对象的属性信息 (1)获取名字信息 首先在C#代码中,this代表着脚本本身&#…

MySQL 事务和视图

🎉🎉🎉点进来你就是我的人了 博主主页:🙈🙈🙈戳一戳,欢迎大佬指点!人生格言:当你的才华撑不起你的野心的时候,你就应该静下心来学习! 欢迎志同道合的朋友一起加油喔🦾&am…

Machine Learning-Ex3(吴恩达课后习题)Multi-class Classification and Neural Networks

目录 1. Multi-class Classification 1.1 Dataset 1.2 Visualizing the data 1.3 Vectorizing Logistic Regression 1.3.1 Vectorizing the cost function(no regularization) 1.3.2 Vectorizing the gradient(no regularization&#…

【ESP-IDF】如何安装ESP-IDF?

【ESP-IDF】如何安装ESP-IDF?Windows命令行安装ESP-IDFVs Code 图形IDE首先参考这篇视频:https://www.bilibili.com/blackboard/webplayer/embed-whitelist-other.html?aid520120377&bvidBV1hM411k7zz&cid888070526&page1本篇教程以Windows…

vue2路由守卫

全局前置_路由守卫 以前古代有一个职称叫御前侍卫:保护君王的安全,而路由守卫就是保护路由的安全(权限) 就是在Home组件中,我们需要先校验内容中的school是否满足要求,才能展示组件,否则不展示…