【Qt+opencv】计时函数与图像变换
文章目录
- 前言
- 计算时间函数
- 图像变换
- 旋转
- 镜像
- 缩放
- 总结
前言
在图像处理和计算机视觉的应用中,我们经常需要对图像进行各种变换,如旋转、缩放、剪切等。同时,为了评估算法的性能,我们也需要对代码的执行时间进行精确的测量。OpenCV提供了一系列的函数和方法,使得这些任务变得简单而直接。
Qt是一个跨平台的应用程序开发框架,它提供了一套完整的图形用户界面库,以及丰富的工具和库,包括线程、网络、数据库和多媒体等。结合OpenCV,我们可以在Qt中创建强大的图像处理和计算机视觉应用。
本文将介绍如何在Qt应用程序中使用OpenCV进行图像变换,以及如何使用Qt的计时函数进行性能测量。
计算时间函数
getTickCount和getTickFrequency是两个常用于计算代码执行时间的函数,它们都被定义在OpenCV的core.hpp文件中。
-
getTickCount函数:- 函数原型:
DWORD GetTickCount(); - 作用:该函数返回从操作系统启动到当前所经过的计时周期数(以毫秒为单位)。这个函数可以用来初始化cv::RNG或者通过在函数调用前后读取tick count来测量函数执行时间。
- 函数原型:
-
getTickFrequency函数:- 函数原型:
double getTickFrequency(); - 作用:该函数返回CPU的频率,也就是每秒的计时周期数。这个函数常与
getTickCount一起使用,用于计算代码的执行时间。
- 函数原型:
例如,你可以使用以下代码来计算某段代码的执行时间:
double t1 = (double)getTickCount();
// your code execution
double t2 = (double)getTickCount();
double time = (t2 - t1) / getTickFrequency();
在这段代码中,time变量就会存储你的代码执行所需的时间(以秒为单位)。如果你想要得到毫秒级的执行时间,只需要将time乘以1000即可。这是因为1秒等于1000毫秒。所以,总次数/一秒内重复的次数 = 时间 (s),1000 *总次数/一秒内重复的次数= 时间 (ms)。
图像变换
对于opencv的图像变换其实就是矩阵的变换,这里不多介绍
旋转
-
cv::transpose函数
函数原型:
cv::transpose(src, dst)- src:输入图像,其矩阵需要被转置。
- dst:输出图像,与源图像具有相同的大小和深度。这是一个可选参数。
cv::transpose函数用于对2D数组进行转置。转置操作会交换矩阵的行和列。 -
cv::rotate函数
函数原型:
cv::rotate(src, rotateCode, dst)- src:输入图像,其颜色空间需要被改变。
- rotateCode:一个枚举值,用于指定如何旋转数组。
- dst:输出图像,与源图像具有相同的大小和深度。这是一个可选参数。
cv::rotate函数用于将2D数组旋转90度的整数倍。该函数可以以三种不同的方式旋转数组。
镜像
当然,以下是OpenCV中flip函数的详细介绍:
cv::flip函数⁴
函数原型:void flip(InputArray src, OutputArray dst, int flipCode);
- src:输入数组。这是需要被翻转的2D数组。
- flipCode:一个标志,用于指定如何翻转数组。0表示沿x轴翻转,正值(例如,1)表示沿y轴翻转。负值(例如,-1)表示沿两个轴翻转。
- dst:输出数组,与源数组具有相同的大小和类型。这是一个可选参数。
缩放
该函数为缩放函数,特别注意:函数缩放会失真(因为缩放后的像素都是计算出来的),尤其是以缩放后的图像继续缩放会原来大小,缩放用缓存,缓存存放原图,每次以原图缩放
函数原型:void cv::resize(InputArray src, OutputArray dst, Size dsize, double fx = 0, double fy = 0, int interpolation = INTER_LINEAR)
-
src:输入图像,通常为
cv::Mat类型。 -
dst:输出图像,与输入图像具有相同的类型。
-
dsize:目标图像的尺寸,表示为
(width, height)。 -
fx:沿水平轴的缩放因子,默认为0,表示不进行水平缩放。
-
fy:沿垂直轴的缩放因子,默认为0,表示不进行垂直缩放。
在OpenCV的resize函数中,dsize和fx, fy是用来控制图像缩放的参数。-
dsize:这是一个
Size对象,表示目标图像的期望大小。例如,如果你想将图像的大小调整为宽度为800像素,高度为600像素,那么你可以设置dsize为Size(800, 600)。 -
fx, fy:这两个参数是缩放因子,用于控制图像在水平方向(fx)和垂直方向(fy)上的缩放比例。例如,如果你想将图像在水平方向上放大2倍,在垂直方向上缩小一半,那么你可以设置
fx为2.0,fy为0.5。 -
dsize和fx, fy之间的关系是,如果dsize不是零,那么fx和fy会被忽略。换句话说,如果你指定了dsize,那么图像将被调整到你指定的大小,而不考虑fx和fy的值。如果dsize是零,那么fx和fy会被用来计算目标图像的大小。 -
缩放因子的影响主要体现在图像的大小和内容的变化上。如果缩放因子大于1,那么图像会被放大,图像的内容会被拉伸。如果缩放因子小于1,那么图像会被缩小,图像的内容会被压缩。如果缩放因子等于1,那么图像的大小和内容不会发生变化。
-
-
interpolation:插值方法,有以下几种可选:
cv::INTER_NEAREST:最近邻插值,速度最快,但质量最差。cv::INTER_LINEAR:线性插值,速度较快,质量较好。cv::INTER_AREA:区域插值,适用于图像缩小,速度较慢,质量最好。cv::INTER_CUBIC:三次样条插值,速度适中,质量较好。cv::INTER_LANCZOS4:Lanczos插值,速度适中,质量较好。
以下是一个使用cv::resize函数的C++代码示例:
#include <opencv2/opencv.hpp>
using namespace cv;int main() {// 读取原始图像Mat src = imread("./image.png", IMREAD_GRAYSCALE);if (src.empty()) {std::cout << "无法读取图像" << std::endl;return -1;}imshow("src", src);waitKey(0);// 放大 2 倍Mat dst;resize(src, dst, Size(src.cols * 2, src.rows * 2), 0, 0, INTER_LINEAR);imshow("2x INTER_LINEAR", dst);waitKey(0);// 缩小 2 倍resize(src, dst, Size(), 0.5, 0.5, INTER_LANCZOS4);imshow("0.5x INTER_LANCZOS4", dst);waitKey(0);return 0;
}
总结
通过本文,我们了解了如何在Qt应用程序中使用OpenCV进行图像变换,以及如何使用Qt的计时函数进行性能测量。这为我们在实际应用中优化算法和提高性能提供了便利。
然而,这只是OpenCV和Qt强大功能的冰山一角。通过进一步的学习和实践,你可以利用这两个工具来创建更复杂的图像处理和计算机视觉应用程序。希望本文能为你的学习之旅提供帮助。记住,实践是最好的老师,所以不断实践和尝试新的项目是提高技能的最好方式。祝你学习愉快!
相关文章:
【Qt+opencv】计时函数与图像变换
文章目录 前言计算时间函数图像变换旋转镜像缩放 总结 前言 在图像处理和计算机视觉的应用中,我们经常需要对图像进行各种变换,如旋转、缩放、剪切等。同时,为了评估算法的性能,我们也需要对代码的执行时间进行精确的测量。OpenC…...
nodejs下载+react安装
一、nodejs安装 1、nodejs下载 具体安装可参考连接:2023最新版Node.js下载安装及环境配置教程(非常详细)从零基础入门到精通,看完这一篇就够了_nodejs安装及环境配置-CSDN博客 下载地址:Node.js — 下载 Node.js 测…...
linux service小例
linux service 测试 1.创建一个app // myapp.c // 间隔10s写入时间到文件 #include <stdio.h> #include <time.h> #include <unistd.h> // 引入unix标准函数定义,如sleep()int main() {FILE *fp;time_t now;char buffer[80];// 打开文件以追加模…...
iOS 开发包管理之 Swift Package Manager
这是由官方推出,用于管理分发 swift 代码的工具。这个在 Xcode 是天然的存在,就是说我们不用安装就能够直接使用。 File > Add Package Dependencies… 在弹出来窗口选择一些库来导入 又或者点左下角的“” > Add Package Collection… 添加完成…...
【C语言初阶】C语言数组基础:从定义到遍历的全面指南
📝个人主页🌹:Eternity._ ⏩收录专栏⏪:C语言 “ 登神长阶 ” 🤡往期回顾🤡:C语言函数 🌹🌹期待您的关注 🌹🌹 ❀数组 📒1. 什么是数组…...
AI开源战争的真相
引言 在AI技术迅猛发展的今天,开源与闭源之争成为了AI圈内最热的话题之一。大模型免费开放的背后到底隐藏着什么样的真相?这是一个令人困惑的问题。本文将深入探讨开源与闭源之争的历史背景、技术演进以及商业利益的博弈。 开源概念的起源 开源软件的…...
使用Java填充Word模板的技术详解
目录 概述常见的Java Word处理库 Apache POIAspose.Words for JavaDocx4j 使用Apache POI填充Word模板 创建和读取Word文档填充文本填充表格 使用Aspose.Words for Java填充Word模板 创建和读取Word文档填充文本填充表格 使用Docx4j填充Word模板 创建和读取Word文档填充文本填…...
vmware配置centos+配置静态ip联网+更换镜像
centos7配置参考【实战】VMware17虚拟机以及Centos7详细安装教程-CSDN博客 ip配置步骤: 先更改编辑虚拟网络编辑器中的内容 就按照还原默认设置来,设定后就是以上内容,然后一定要记住子网ip和子网掩码 接下来就是NAT设置: 网关…...
广州数据中心服务器搬迁方案
设备搬迁的准备工作涵盖资料准备、环境准备、计划细化等工作。资料准备主要是对旧机房的整理工作,对所搬运的设备进行资料整理,首先对每台设备建立基本情况、位置说明、系统关联性、搬迁批次及工作步骤等的设备档案,然后在档案资料收集完的基…...
uniapp开发钉钉小程序流程
下载开发工具 1、小程序开发工具 登录钉钉开发平台,根据自己的需求下载合适的版本,我这里下载的是Windows (64位)版本 小程序开发工具 - 钉钉开放平台 2、HBuilder X HBuilderX-高效极客技巧 新建项目及相关配置 新建项目 …...
河南萌新联赛2024第(一)场:河南农业大学 A D F G H I K
A 造数 题目描述: 给定一个整数 𝑛 ,你可以进行以下三种操作 操作1: 1 操作2; 2 操作3: 2 问最少需要多少次操作可以将 0 转为为 𝑛 。 解题思路 操作1,2,3。操作 3 …...
通信协议_C#实现CAN通信
CAN协议 CAN(Controller Area Network)即控制器局域网络。特点: 多主网络:网络上的任何节点都可以主动发送数据,不需要一个固定的主节点。双绞线:使用双绞线作为通信介质,支持较远的通信距离。…...
【AI工具基础】—B树(B-tree)
B树(B-tree)是一种自平衡的树状数据结构,它能够在保持数据有序的同时,优化大块数据的读写操作,使得查找、顺序访问、插入和删除等操作都能在对数时间内完成。以下是对B树原理的详细描述: 一、定义与特性 …...
STM32智能仓库管理系统教程
目录 引言环境准备智能仓库管理系统基础代码实现:实现智能仓库管理系统 4.1 数据采集模块 4.2 数据处理与控制模块 4.3 通信与网络系统实现 4.4 用户界面与数据可视化应用场景:仓库管理与优化问题解决方案与优化收尾与总结 1. 引言 智能仓库管理系统通…...
空间计算开发:Volu的集成开发工具包
在空间计算技术迅速发展的今天,VR和AR项目的开发需求日益增长。Volu,一个面向空间计算赛道的开发者工具,正致力于简化这一过程。本文将深入探讨Volu如何通过其集成环境,为开发者提供一站式的解决方案。 一、定位:空间计算的得力助手 Volu定位为一个专为空间开发设计的集…...
02-Redis未授权访问漏洞
免责声明 本文仅限于学习讨论与技术知识的分享,不得违反当地国家的法律法规。对于传播、利用文章中提供的信息而造成的任何直接或者间接的后果及损失,均由使用者本人负责,本文作者不为此承担任何责任,一旦造成后果请自行承担&…...
Linux——多路复用之poll
目录 前言 一、poll的认识 二、poll的接口 三、poll的使用 前言 前面我们学习了多路复用的select,知道多路复用的原理与select的使用方法,但是select也有许多缺点,导致他的效率不算高。今天我们来学习poll的使用,看看poll较于…...
【AI资讯】7.19日凌晨OpenAI发布迷你AI模型GPT-4o mini
性价比最高的小模型 北京时间7月19日凌晨,美国OpenAI公司推出一款新的 AI 模型“GPT-4o mini”,即GPT-4o的更小参数量、简化版本。OpenAI表示,GPT-4o mini是目前功能最强大、性价比最高的小参数模型,性能逼近原版GPT-4࿰…...
3.设计模式--创建者模式--工厂模式
3.设计模式–创建者模式–工厂模式 3.1简单工厂和静态 工厂(不属于23中设计模式) //抽象类:定义了产品的规范,描述了产品的主要特性和功能 public interface Tea {public abstract void setName();public abstract String getNa…...
IOT 的 10 种常见协议、组网模式、特点及其使用场景浅析
前情: 开放系统互连(OSI)模型,它列出了七层。从下到上,各层如下: 物理层 数据链接 网络层 传输层 会话层 推介会 应用层 物联网也以多层模型的形式表达。尽管有些使用 OSI 七层模型,但其…...
深度学习在微纳光子学中的应用
深度学习在微纳光子学中的主要应用方向 深度学习与微纳光子学的结合主要集中在以下几个方向: 逆向设计 通过神经网络快速预测微纳结构的光学响应,替代传统耗时的数值模拟方法。例如设计超表面、光子晶体等结构。 特征提取与优化 从复杂的光学数据中自…...
Admin.Net中的消息通信SignalR解释
定义集线器接口 IOnlineUserHub public interface IOnlineUserHub {/// 在线用户列表Task OnlineUserList(OnlineUserList context);/// 强制下线Task ForceOffline(object context);/// 发布站内消息Task PublicNotice(SysNotice context);/// 接收消息Task ReceiveMessage(…...
mongodb源码分析session执行handleRequest命令find过程
mongo/transport/service_state_machine.cpp已经分析startSession创建ASIOSession过程,并且验证connection是否超过限制ASIOSession和connection是循环接受客户端命令,把数据流转换成Message,状态转变流程是:State::Created 》 St…...
最新SpringBoot+SpringCloud+Nacos微服务框架分享
文章目录 前言一、服务规划二、架构核心1.cloud的pom2.gateway的异常handler3.gateway的filter4、admin的pom5、admin的登录核心 三、code-helper分享总结 前言 最近有个活蛮赶的,根据Excel列的需求预估的工时直接打骨折,不要问我为什么,主要…...
论文解读:交大港大上海AI Lab开源论文 | 宇树机器人多姿态起立控制强化学习框架(一)
宇树机器人多姿态起立控制强化学习框架论文解析 论文解读:交大&港大&上海AI Lab开源论文 | 宇树机器人多姿态起立控制强化学习框架(一) 论文解读:交大&港大&上海AI Lab开源论文 | 宇树机器人多姿态起立控制强化…...
面向无人机海岸带生态系统监测的语义分割基准数据集
描述:海岸带生态系统的监测是维护生态平衡和可持续发展的重要任务。语义分割技术在遥感影像中的应用为海岸带生态系统的精准监测提供了有效手段。然而,目前该领域仍面临一个挑战,即缺乏公开的专门面向海岸带生态系统的语义分割基准数据集。受…...
A2A JS SDK 完整教程:快速入门指南
目录 什么是 A2A JS SDK?A2A JS 安装与设置A2A JS 核心概念创建你的第一个 A2A JS 代理A2A JS 服务端开发A2A JS 客户端使用A2A JS 高级特性A2A JS 最佳实践A2A JS 故障排除 什么是 A2A JS SDK? A2A JS SDK 是一个专为 JavaScript/TypeScript 开发者设计的强大库ÿ…...
Java毕业设计:WML信息查询与后端信息发布系统开发
JAVAWML信息查询与后端信息发布系统实现 一、系统概述 本系统基于Java和WML(无线标记语言)技术开发,实现了移动设备上的信息查询与后端信息发布功能。系统采用B/S架构,服务器端使用Java Servlet处理请求,数据库采用MySQL存储信息࿰…...
招商蛇口 | 执笔CID,启幕低密生活新境
作为中国城市生长的力量,招商蛇口以“美好生活承载者”为使命,深耕全球111座城市,以央企担当匠造时代理想人居。从深圳湾的开拓基因到西安高新CID的战略落子,招商蛇口始终与城市发展同频共振,以建筑诠释对土地与生活的…...
Kubernetes 网络模型深度解析:Pod IP 与 Service 的负载均衡机制,Service到底是什么?
Pod IP 的本质与特性 Pod IP 的定位 纯端点地址:Pod IP 是分配给 Pod 网络命名空间的真实 IP 地址(如 10.244.1.2)无特殊名称:在 Kubernetes 中,它通常被称为 “Pod IP” 或 “容器 IP”生命周期:与 Pod …...
