QT opencv 学习day01 安装opencv ,

news2024/11/17 20:50:47

1. 安装opencv  教程 看这个大佬的链接 (实测有用)(操作简单)

链接: (1条消息) 【OpenCV】windows Qt环境搭建_logani的博客-CSDN博客


2. 使用opencv 的注意事项

1.首先要在工程文件 .pro 文件里面  加入路径,与引用的头文件  (根据自己的安装路径 来)

INCLUDEPATH +=D:\windows_opencv\opencv\opencv_3.4.2_Qt\include

LIBS +=D:\windows_opencv\opencv\opencv_3.4.2_Qt\x86\bin\libopencv_*.dll

 2. 使用的时候,加上使用的命名空间

#include<opencv2/opencv.hpp>
using namespace cv;

 3. 根据测试代码 , 基本了解opencv  在 QT  的使用

1. 注意:你把这段代码放在 可以运行的地方就行了, (构造函数里面)

2. 代码功能: 使用电脑摄像头, 进行每帧图像的抓拍, 使用opencv语句开辟一个opencv 窗口, 把摄像头抓拍的图像数据导入 图片, 对图片进行处理, 显示在 opencv的窗口里面.

VideoCapture cap(0);//从视屏设备中读取视频
        if(!cap.isOpened())//判断摄像头,是否打开
        {
             qDebug()<<"cap not  open !" << endl;//没有打开 有提示
        }
        
        
        Mat frame, edges; //Mat opencv中表示图片的类型
        namedWindow("edges", WINDOW_AUTOSIZE);//namedWindos功能是创建一个OpenCV窗口,它是由OpenCV自动创建与释放,你无需取销毁它。
        for(;;)//死循环
        {
            cap >> frame;   //opertor>>方法利用函数重载提取单帧图像image,read方法的输入是Mat的引用,这种方式得到的实际是VideoCapture解析得到的单帧图像的引用,当后续再读取帧时,Mat数据将会自动释放,自动更新成新的数据信息。Mat复制构造函数和赋值操作共享数据空间,当需要同时获取多帧图像源时,可以利用Mat提供的Mat::clone()方法进行复制操作。
            cvtColor(frame, edges, COLOR_BGR2GRAY); //opencv使用cvtColor()函数对图像进行色彩空间的转换。
            GaussianBlur(edges, edges, Size(7,7), 1.5, 1.5);
            Canny(edges, edges, 0, 30, 3);
            imshow("edges", edges);
            if(waitKey(30) >= 0) break;//按键就会退出
        }

3.VideoCapture 语句  分析  (打开摄像头,或者打开视频获取其中的图像数据)

VideoCapture cap(0);//从视屏设备中读取视频

1. 原型:

VideoCapture::VideoCapture();  //打开视频文件或捕获设备或用于视频捕获的IP视频流
VideoCapture::VideoCapture(const string &filename); // 使用API首选项打开视频文件或捕获设备或IP视频流进行视频捕获
VideoCapture::VideoCapture(const String& filename, int apiPreference);//打开相机进行视频拍摄
VideoCapture::VideoCapture(int device);//要打开的视频捕获设备的  +   id

 2. 参数 解析

filename表示视频文件的路径及名称
device要打开的视频捕获设备的id。要使用默认后端打开默认相机,只需传递0。
apiPreference首选要使用的捕获API后端

3.功能

实际功能: 这个函数用来从本地文件或摄像头设备中读取视频。

4.测试语句的代码:

        VideoCapture cap(0);//从视屏设备中读取视频
        if(!cap.isOpened())//判断摄像头,是否打开
        {
             qDebug()<<"cap not  open !" << endl;//没有打开 有提示
        }


        Mat frame, edges; //Mat opencv中表示图片的类型
        namedWindow("edges", WINDOW_AUTOSIZE);//namedWindos功能是创建一个OpenCV窗口,它是由OpenCV自动创建与释放,你无需取销毁它。
        for(;;)//死循环
        {
            cap >> frame;   //opertor>>方法利用函数重载提取单帧图像image,read方法的输入是Mat的引用,这种方式得到的实际是VideoCapture解析得到的单帧图像的引用,当后续再读取帧时,Mat数据将会自动释放,自动更新成新的数据信息。Mat复制构造函数和赋值操作共享数据空间,当需要同时获取多帧图像源时,可以利用Mat提供的Mat::clone()方法进行复制操作。
        
            imshow("edges", edges);
            if(waitKey(30) >= 0) break;//按键就会退出
        }

5.相关函数

函数   方法
VideoCapture::open 打开视频文件或视频获取装置
VideoCapture::isOpened判断视频文件是否正确,返回true则正确
VideoCapture::release 关闭视频流文件
VideoCapture::grab 抓住下一帧的视频文件或捕获设备
VideoCapture::retrieve  解码并返回了视频帧
VideoCapture::read 抓住,解码并返回下一个视频帧
VideoCapture::get返回指定视频类的相关参数信息
VideoCapture::set设置类信息的一个属性


4.namedWindos 语句  (建立opencv 的窗口)

1.原型:

void namedWindow(const String& winname, int flags = WINDOW_AUTOSIZE);

2.参数 解析

winname窗口标题
flags窗口的标志

flags:

  • WINDOW_AUTOSIZE会自动根据图像大小,显示窗口大小,不能人为改变窗口大小

  • WINDOW_NORMAL,跟QT集成的时候会使用,允许修改窗口大小。

3.功能

实际功能:namedWindos功能是创建一个OpenCV窗口,它是由OpenCV自动创建与释放,你无需取销毁它。

4. 测试代码

namedWindow("edges", WINDOW_AUTOSIZE);//namedWindos功能是创建一个OpenCV窗口,它是由OpenCV自动创建与释放,你无需取销毁它。
//后面的参数可以不要


5. cvtColor  语句   (图像转换)

1. 原型:

void cvtColor( InputArray src, OutputArray dst, int code, int dstCn = 0 );

2. 参数解析:

src输入图像
dst 输出与src大小和深度相同的图像
code颜色空间转换代码
dstCn

目标图像中的信道数;如果参数为0

频道是从src和代码中自动导出的。

3.功能

实际功能:函数对图像进行色彩空间的转换。 



6. GaussianBlur  语句   (高斯滤波)

1.函数原型:

 void GaussianBlur( InputArray src, OutputArray dst, Size ksize,
                                double sigmaX, double sigmaY = 0,
                                int borderType = BORDER_DEFAULT );

2.参数解析:

src输入图像
dst输出图像
ksize高斯核大小 

ksize.width和ksize.height可以不同,但两者必须相同

正和奇数。或者,它们可以是零,然后根据sigma计算。

sigmaxX方向上的高斯核标准偏差
sigmaYY方向上的高斯核标准偏差
borderType像素外推方法 (可以不写这个参数)

3.功能:

实际功能: 这个函数用来对图像进行 高斯滤波 。

4.高斯滤波:高斯滤波是一种线性平滑滤波,适用于消除高斯噪声,广泛应用于图像处理的减噪过程。  通俗的讲,高斯滤波就是对整幅图像进行加权平均的过程,每一个像素点的值,都由其本身和邻域内的其他像素值经过加权平均后得到。高斯滤波的具体操作是:用一个模板(或称卷积、掩模)扫描图像中的每一个像素,用模板确定的邻域内像素的加权平均灰度值去替代模板中心像素点的值。



7. Canny()  语句  (边缘检测)

1.函数原型

void Canny( InputArray image, OutputArray edges,
                         double threshold1, double threshold2,
                         int apertureSize = 3, bool L2gradient = false );

2. 参数分析

image输入图像
edges输出边缘映射的图像
threshold1滞后过程的第一阈值。
threshold2滞后过程的第二阈值。
apertureSize运算符的孔径大小 (参数默认是3 )
L2gradient计算图像梯度幅度标志 (这个参数可以不要填)

3. 功能:

Canny边缘检测算子是John.F.Canny与1986年开发出来的一个多级边缘检测算法;边缘检测是计算机视觉中一个非常古老的问题,它涉及到检测图像中的边缘来确定目标的边界,从而分离感兴趣的目标。最流行的边缘检测技术之一是Canny边缘检测。



8.  imshow  语句  (显示函数)

1.函数原型

void imshow(const String& winname, const ogl::Texture2D& tex);

2. 参数解析

winname窗口的名称  (那个窗口)
tex图片名称 (或者是数据名称)

3. 功能:

实际功能:再某一个窗口显示一个 一张照片的数据。 (窗口加载图片)

4.测试程序

imshow("edges", edges);



9. imread  语句  (加载一个 绝对路径的图片,, 变成 opencv   Mat 照片 )

1. 函数原型:

Mat imread( const String& filename, int flags = IMREAD_COLOR );

2. 参数:

filename要加载的文件的名称 (路径)
flags表示加载的图像是什么类型,支持常见的三个参数值

flags: 

3. 功能:

实际功能: 把电脑里面的 图片数据 转化为 opencv  Mat  照片

4.测试语句

 //创建一个Mat对象并在里面写入图片数据(图片即存储像素点的矩阵数组)
 Mat src = imread("D://xixi.jpg");  //路径要改

5. 与opencv   Mat图片相关的函数

一个链接 : (2条消息) Opencv Mat类常用构造函数和成员函数整理_Gargamel97的博客-CSDN博客_opencv mat构造函数



10.   waitKey  语句  (不断刷新图像,等待键盘按下退出这个状态)

1. 函数原型:

int waitKey(int delay = 0);

2. 参数:

delay    delay延时时间 (一张图片图像刷新时间),单位ms;

3. 功能: 

waitKey函数功能是不断刷新图像,频率时间为delay,单位为ms;该函数通常用在显示图像函数之后。

4.返回值: 

返回值:key -- 当前键盘按键值ASCII。(键盘按键与 ASCII 字符集对照表



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

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

相关文章

Springboot+Echarts实现数据可视化项目

首先,得明白 springboot 需要写什么内容? 先理解下 MVC 模式! bean 层 也称之为 Dao 层 包括XxxMapper.java(数据库访问接口类),XxxMapper.xml(数据库链接实现);mapper 层 也称之为 model层,模型层,entity层,实体层 就是数据库表的映射实体类,存放POJO对象;servi…

Nginx反向代理与负载均衡

一.何为反向代理? 在介绍反向代理之前&#xff0c;先来了解一下正向代理。 正向代理&#xff1a;如果把局域网外的Internet想象成一个巨大的资源库&#xff0c;则局域网中的客户端要访问Internet&#xff0c;则需要通过代理服务器来访问&#xff0c;这种代理服务就称为正向代…

【前端利器炫酷的CodePen】

前言众所周知&#xff0c;前端是一个很容易将自己的劳动成果呈现出来的一个职位&#xff0c;无论是写1行代码还是写100行代码&#xff0c;都可以通过页面来进行呈现&#xff0c;在工作中的劳作成果也是可以一眼就呈现给客户、用户的。比如一些精美的页面&#xff0c;炫酷的特效…

java集合: ArrayList的底层机制和使用方法

文章目录引言一、Arraylist是什么&#xff1f;二、Arraylist的底层扩容机制(面向面试)1.扩容机制2.扩容过程:3步骤3.注意事项三、使用步骤1.ArrayList类引入2.添加元素3.删除元素4.计算大小5.其他的引用类型6.ArrayList 排序7.ArrayList的遍历方法8.Java ArrayList 方法表格引言…

HTML5+CSS3(六)-全面详解(学习总结---从入门到深化)

目录 CSS简介 CSS概念 为什么需要CSS CSS和HTML之间的关系 语法 学习效果反馈 CSS的引入方式 内联样式&#xff08;行内样式&#xff09; 内部样式 外部样式&#xff08;推荐&#xff09; 导入式&#xff08;了解&#xff09; import和link的区别 学习效果反馈 CSS样式…

代码随想录day53 动态规划

代码随想录day53 动态规划 题392 判断是否子序列 1&#xff0c;与最长公共子序列类似&#xff0c;最后公共子序列的长度要等于s的长度。区别在于当遍历元素不想等的时候&#xff0c;对于字符串s&#xff08;子序列&#xff09;不需要删除&#xff0c;对于字符串t&#xff0c;…

Android---CoordinatorLayout原理

目录 CoordinatorLayout 的作用 CoordinatorLayout 的功能 1 处理子控件之间依赖下的交互 2 处理子控件之间的嵌套滑动 3 处理子控件的测量与布局 4 处理子控件的事件拦截与响应 CoordinatorLayout 下的事件传递机制 CoordinatorLayout 协调者布局。 CoordinatorLayout…

Java基础之序列化与反序列化

序列化&#xff1a;将java对象转化为字节序列的过程。 反序列化&#xff1a;将字节序列转化为java对象的过程。 在进行远程通信时&#xff0c;如果需要传输java对象&#xff1a;发送方需要把java对象转换为字节序列(也就是序列化)&#xff0c;接收方需要将字节序列转换为java对…

PHP设计模式总括篇

系列文章目录 第一章 工厂模式 第二章 抽象工厂模式 第三章 单列模式 第五章 责任链模式 第六章 策略模式 一&#xff0c;定义 “每一个模式描述了一个在我们周围不断重复发生的**问题&#xff0c;以及该问题的解决方案的核心。**这样&#xff0c;你就能一次又一次地使用该方…

都React V18了,还不会正确使用React Hooks吗,万字长文解析Hooks的常见问题

前言 今天主要想说一下react hooks&#xff0c;react hooks是react v16.8 之后引入的API&#xff0c;现在react都已经到V18了&#xff0c;hooks怎么还能不会用呢&#xff1f; 首先hooks引入的目的是给函数式组件增加数据状态管理的能力&#xff0c;同时增加代码的可复用能力。…

C++的类型转换详解

目录前言一、C语言中的类型转换二、为什么C需要四种类型转换三、C强制类型转换3.1 static_cast3.2 reinterpret_cast3.3 const_cast3.4 dynamic_cast向上转型向下转型四、RTTI(了解)总结前言 在C语言就已经存在了类型转化&#xff0c;但是其中的一些类型转换存在一些问题&…

4.7--贪心--多机调度问题

贪心选择--最长处理时间作业优先&#xff08;n个作业&#xff0c;m台相同机器&#xff09; 当n<m时&#xff0c;只要将机器i的[0, ti]时间区间分配给作业i即可&#xff0c;算法只需要O(1)时间。 当n>m时&#xff0c;首先将n个作业依其所需的处理时间从大到小排…

开发者开年变富,如何迈出第一步?| 「钞能力养成指北」前传

写在前面 &#xff1a; 面对全面放开后多样的消费机会&#xff0c;开发者们如何在保障品质生活的同时&#xff0c;借助开源工具&#xff0c;全面、科学地规划和管理个人财务&#xff0c;把握资金动向&#xff0c;避开消费陷阱&#xff1f; LigaAI 特邀我司 Nerd4me 大佬分享其个…

Apollo planning之交规决策技术

Apollo studio 官网&#xff1a;Apollo开发者社区 (baidu.com) 目录 1 双层状态机 2 决策模块的解析 2.1 参考路径 2.2 交规决策 2.3 路径决策 2.4 速度决策 2.5 场景的调度与管理 3 交规决策实现代码解读 3.1 遍历交规配置文件&#xff0c;存储信息 3.2 交规决…

分布式(三)

三、API 网关详解 1. 网关及作用 主要功能&#xff1a;请求过滤 网关可以为我们提供请求转发、安全认证&#xff08;身份/权限认证&#xff09;、流量控制、负载均衡、降级熔断、日志、监控等功能。 2. 常见的网关系统 2.1 Netflix Zuul &#xff08;1&#xff09;Zuul 是…

进军存储赛道—BNB Greenfield:Web3 数据所有权和效用新标准

最近BNB Chain 自豪地宣布发布BNB Greenfield 白皮书。BNB Greenfield为Web3时代的数据引入了一个全新的结构和经济模式。现在&#xff0c;数据的所有权、使用权和货币化&#xff0c;首先对用户以及BNB Chain生态系统中的所有参与者来说是可能的。BNB Greenfield 使用 BNB 作为…

OSCP_VULHUB_symfonos-2(失败)

文章目录 前言实验攻击尝试hydra爆破ftpmetasploit工具进行SSH登录端口转发1命令注入getshell 1端口转发2提权失败总结前言 这个是练习的第5个机子。 目标地址 https://www.vulnhub.com/entry/symfonos-2,331/ 实验 1.信息收集 1.1 目标ip 1.2 开放端口 nmap -sS -sV -A …

QT入门Buttons之QCommandLinkButton、QDialogButtonBox

目录 一、QCommandLinkButton界面布局介绍 二、QCommandLinkButton基本属性介绍 三、QDialogButtonBox界面布局介绍 1、布局器中的位置及使用 此文为作者原创&#xff0c;转载请标明出处&#xff01; 一、QCommandLinkButton界面布局介绍 一般这两个控件使用较少&#xf…

HarmonyOS/OpenHarmony应用开发-DevEco Studio 3.0与DevEco Studio 3.1版本差异

工程模板和开发语言介绍 DevEco Studio支持包括手机、平板、车机、智慧屏、智能穿戴、轻量级智能穿戴和智慧视觉设备的HarmonyOS应用/服务开发&#xff0c;预置了工程模板&#xff0c;可以根据工程向导轻松创建适应于各类设备的工程&#xff0c;并自动生成对应的代码和资源模板…

C生万物 | 揭开【整型提升】神秘面纱

&#x1f451;作者主页&#xff1a;Fire_Cloud_1 &#x1f3e0;学习社区&#xff1a;烈火神盾 &#x1f517;专栏链接&#xff1a;C生万物 文章目录一、前言二、整型提升的意义所在三、如何进行整型提升❓四、实战演练&#x1f5e1;1、深剖两数求和的内部运算2、三种不同数据类…