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

  • Qt Creator中使用opencv

在.pro文件中添加

QT += multimedia
QT += multimediawidgets
INCLUDEPATH += D:\MajorSoftware\opencv\opencv\build\include
LIBS += D:\MajorSoftware\opencv\opencv\mingw_build\lib\libopencv_*.a
#include <QtMultimedia/QMediaPlayer>
#include <QtMultimediaWidgets/QVideoWidget>

在这里插入图片描述

  • 一个插件就是一个简单的库,如.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命名空间共同使用,可以处理多线程及异步操作结果
  • 在多线程编程中,对于竞争条件问题,确保每个线程在访问和修改对象之前都要等待,直到轮到后执行,这类问题的解决方法称为访问序列化,多线程编程中,借助互斥锁来解决。互斥锁是一种保护和防止多个线程同时访问同一个对象实例的方法

  • 构建应用程序时三个阶段:可执行文件的预处理、编译以及链接

  • 动态链接是将编译器生成的对象链接起来的过程,方法是在生成的可执行文件或库中放入函数名称,以便特定的函数的实际代码驻留在共享库中。

  • 静态链接将所有需要的代码链接到生成的可执行文件中,从而创建一个静态库或可执行文件

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值