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



相关内容

热门资讯

安卓子系统windows11,... 你知道吗?最近科技圈可是炸开了锅,因为安卓子系统在Windows 11上的兼容性成了大家热议的话题。...
电脑里怎么下载安卓系统,电脑端... 你有没有想过,你的电脑里也能装上安卓系统呢?没错,就是那个让你手机不离手的安卓!今天,就让我来带你一...
索尼相机魔改安卓系统,魔改系统... 你知道吗?最近在摄影圈里掀起了一股热潮,那就是索尼相机魔改安卓系统。这可不是一般的改装,而是让这些专...
安卓系统哪家的最流畅,安卓系统... 你有没有想过,为什么你的手机有时候像蜗牛一样慢吞吞的,而别人的手机却能像风一样快?这背后,其实就是安...
安卓最新系统4.42,深度解析... 你有没有发现,你的安卓手机最近是不是有点儿不一样了?没错,就是那个一直在默默更新的安卓最新系统4.4...
android和安卓什么系统最... 你有没有想过,你的安卓手机到底是用的是什么系统呢?是不是有时候觉得手机卡顿,运行缓慢,其实跟这个系统...
平板装安卓xp系统好,探索复古... 你有没有想过,把安卓系统装到平板上,再配上XP系统,这会是怎样一番景象呢?想象一边享受着安卓的便捷,...
投影仪装安卓系统,开启智能投影... 你有没有想过,家里的老式投影仪也能焕发第二春呢?没错,就是那个曾经陪你熬夜看电影的“老伙计”,现在它...
安卓系统无线车载carplay... 你有没有想过,开车的时候也能享受到苹果设备的便利呢?没错,就是那个让你在日常生活中离不开的iOS系统...
谷歌安卓8系统包,系统包解析与... 你有没有发现,手机更新换代的速度简直就像坐上了火箭呢?这不,最近谷歌又发布了安卓8系统包,听说这个新...
微软平板下软件安卓系统,开启全... 你有没有想过,在微软平板上也能畅享安卓系统的乐趣呢?没错,这就是今天我要跟你分享的神奇故事。想象你手...
coloros是基于安卓系统吗... 你有没有想过,手机里的那个色彩斑斓的界面,背后其实有着一个有趣的故事呢?没错,我要说的就是Color...
安卓神盾系统应用市场,一站式智... 你有没有发现,手机里的安卓神盾系统应用市场最近可是火得一塌糊涂啊!这不,我就来给你好好扒一扒,看看这...
黑莓平板安卓系统升级,解锁无限... 亲爱的读者们,你是否还记得那个曾经风靡一时的黑莓手机?那个标志性的全键盘,那个独特的黑莓体验,如今它...
安卓文件系统采用华为,探索高效... 你知道吗?最近安卓系统在文件管理上可是有了大动作呢!华为这个科技巨头,竟然悄悄地给安卓文件系统来了个...
深度系统能用安卓app,探索智... 你知道吗?现在科技的发展真是让人惊叹不已!今天,我要给你揭秘一个超级酷炫的话题——深度系统能用安卓a...
安卓系统的分区类型,深度解析存... 你有没有发现,你的安卓手机里藏着不少秘密?没错,就是那些神秘的分区类型。今天,就让我带你一探究竟,揭...
安卓系统铠无法兑换,揭秘无法兑... 最近是不是有很多小伙伴在玩安卓系统的游戏,突然发现了一个让人头疼的问题——铠无法兑换!别急,今天就来...
汽车安卓系统崩溃怎么刷,一键刷... 亲爱的车主朋友们,你是否曾遇到过汽车安卓系统崩溃的尴尬时刻?手机系统崩溃还能重启,但汽车系统崩溃了,...
miui系统可以刷安卓p系统吗... 亲爱的手机控们,你是否对MIUI系统情有独钟,同时又对安卓P系统的新鲜功能垂涎欲滴?今天,就让我带你...