QT opencv 学习day01 安装opencv ,
创始人
2024-05-23 01:21:49
0

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

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


2. 使用opencv 的注意事项

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

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

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

#include
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 字符集对照表



相关内容

热门资讯

非安卓10系统手机,探索非安卓... 你有没有想过,为什么有些人会选择非安卓10系统的手机呢?是不是觉得这有点奇怪?别急,今天就来带你一探...
手机图标制作安卓系统,手机图标... 你有没有想过,那些在手机屏幕上跳动的图标,其实都是精心设计出来的艺术品呢?没错,今天就要带你一探究竟...
安卓系统和鸿蒙系统谁大,谁才是... 你有没有想过,手机里的操作系统就像是一场无声的较量?今天,咱们就来聊聊这个话题:安卓系统和鸿蒙系统,...
bj40安卓系统,功能解析与使... 你有没有发现,最近你的BJ40越野车变得聪明多了?没错,它升级了安卓系统,简直就像给它装上了个智能大...
安卓系统硬件核心板,揭秘智能设... 你有没有想过,手机里的安卓系统其实就像是一个庞大的城市,而硬件核心板就是这座城市的核心区域?今天,就...
王者荣耀安卓系统转区ios系统... 你有没有想过,把你的王者荣耀账号从安卓系统转到iOS系统呢?这可不是一件小事,里面可是有大学问的哦!...
安卓系统的音游,节奏与音乐的完... 你有没有发现,手机里的游戏越来越好玩了?尤其是那些音游,简直让人停不下来!今天,就让我带你深入了解一...
安卓系统取消下方按键,探索全新... 你知道吗?最近安卓系统来了一次大变动,那就是取消了下方按键!这可真是让人眼前一亮,让我们一起来看看这...
安卓系统显示原理设置,从像素到... 你有没有发现,你的安卓手机屏幕上那些花花绿绿的图标和文字,其实背后有着一套神奇而又复杂的显示原理呢?...
平板安卓4.0系统下载,平板下... 你有没有想过,拥有一台运行着最新安卓4.0系统的平板电脑,那感觉简直就像拥有了未来的钥匙?想象流畅的...
安卓原生12系统下载,原生系统... 你有没有听说?安卓原生12系统终于来了!这款全新的操作系统,不仅带来了全新的视觉体验,还有一堆实用的...
安卓怎么下泼辣系统,安卓设备轻... 你有没有想过给你的安卓手机来个“大变身”?想象你的手机瞬间变成了一个泼辣的“女侠”,不仅个性十足,而...
安卓版小米系统下载,畅享智能生... 你有没有发现,最近手机圈里又掀起了一股热潮?没错,就是安卓版小米系统的下载。这款系统自从推出以来,就...
提取安卓系统自带软件,探索安卓... 你有没有想过,你的安卓手机里那些看似不起眼的自带软件,其实都是隐藏的宝藏呢?今天,就让我带你一探究竟...
安卓系统投屏到鸿蒙系统,鸿蒙系... 亲爱的读者们,你是否有过这样的体验:手里拿着安卓手机,却想在大屏幕的鸿蒙系统设备上展示内容?别急,今...
sony 电视安卓8.0系统,... 亲爱的读者们,你是否也和我一样,对科技产品有着浓厚的兴趣呢?今天,我要和你聊聊一个让我眼前一亮的话题...
安卓 替换系统下载,探索安卓系... 你有没有想过,你的安卓手机其实可以换换口味呢?没错,就是那个一直默默陪伴你的系统,今天就来带你一起探...
安卓系统证书信任,安卓系统证书... 你有没有遇到过这种情况?手机里突然弹出一个提示,告诉你某个应用需要获取系统证书信任,然后你一脸懵逼,...
安卓系统应用数据目录,揭秘系统... 你有没有想过,你的安卓手机里那些应用,它们的数据都藏在哪个角落呢?今天,就让我带你一探究竟,揭开安卓...
kindle 安卓 系统 刷机... 亲爱的读者们,你是不是也和我一样,对电子阅读设备情有独钟?尤其是那款小巧便携的Kindle,简直是阅...