视觉OpenCV(win10+opencv3.4.6+VS2017)学习中笔记、相关疑惑及解答

1、新建项目时,选择空项目会出现中文乱码甚至报错,选择Windows控制台应用程序则不会,暂时未找到原因及解决方法。

2、关于头文件引用的两种方式尖括号和双引号的区别:
·用 #include <filename.h> 格式来引用标准库的头文件(编译器将从标准库目录开始搜索)
·用 #include “filename.h” 格式来引用非标准库的头文件(编译器将从用户的工作目录开始搜索)
建议用尖括号<>,更标准。

3、opencv.hpp中已经包含了OpenCV各模块的头文件,所以我们在编写core、objdetect、imgproc、photo、video、feature2d、calib3d、ml、highgui、contrib模块的应用程序时,原则上仅写“#include <opencv2/opencv.hpp>”即可。

4、命名规范约定(摘自《OpenCV3编程入门》(第三版 毛星云))
在这里插入图片描述

匈牙利命名法:
在这里插入图片描述

命名规范:
在这里插入图片描述

关键字字母组合:
在这里插入图片描述

5、关于类和对象:
https://www.jianshu.com/p/29a7c4e69e05
http://c.biancheng.net/cplus/class/

6、alpha通道:阿尔法通道是一个8位的灰度通道,该通道用256级灰度来记录图像中的透明度信息,定义透明、不透明和半透明区域,其中白表示不透明,黑表示透明,灰表示半透明。百度百科:https://dwz.cn/jUeHFcf1

7、回调函数:回调函数就是一个通过函数指针调用的函数。如果你把函数的指针(地址)作为参数传递给另一个函数,当这个指针被用来调用其所指向的函数时,我们就说这是回调函数。回调函数不是由该函数的实现方直接调用,而是在特定的事件或条件发生时由另外的一方调用的,用于对该事件或条件进行响应。百度百科:点这

8、关于Mat& :Mat &a的意思是创建一个矩阵a的引用,一般用于传递函数的参数上面,比如输入一个图像矩阵a,然后在a上面进行诸如二值化,颜色缩减等函数之后再imshow(a)就会直观的显示出处理之后的图像,相当于克隆了一个a图像矩阵,在a上面怎么操作,源图像也会相应的变化。见:https://dwz.cn/VwgMqo3N

9、char 是有符号的 ,uchar(unsigned char) 是无符号的,8-bit无符号整形数据,里面全是正数。两者都作为字符用的话是没有区别的,但当整数用时有区别:char整数范围为 -128到127( 0x80__0x7F),而unsigned char 整数范围为0到255( 0__0xFF ) 有时候想把整数数值限在255范围内,也用unsigned char。

10、迭代器:迭代器(iterator)有时又称游标(cursor)是程序设计的软件设计模式,可在容器(container,例如链表或阵列)上遍访的接口,设计人员无需关心容器的内容。见百科。

11、 图像深度百科:指存储每个像素所用的位数,也用于量度图像的色彩分辨率.图像深度确定彩色图像的每个像素可能有的颜色数,或者确定灰度图像的每个像素可能有的灰度级数.它决定了彩色图像中可出现的最多颜色数,或灰度图像中的最大灰度等级.比如一幅单色图像,若每个象素有8位,则最大灰度数目为2的8次方,即256.一幅彩色图像RGB3个分量的象素位数分别为4,4,2,则最大颜色数目为2的4+4+2次方,即1024,就是说像素的深度为10位,每个像素可以是1024种颜色中的一种。见:https://dwz.cn/4k1NnaGR

12、vector类:https://dwz.cn/NKygV6dw

13、常见的算子:https://dwz.cn/CQUO0zx5

14、static:https://dwz.cn/sZIOACg6

15、噪点:图像噪声(image noise)是图像中一种亮度或颜色信息的随机变化(被拍摄物体本身并没有),通常是电子噪声的表现。它一般是由扫描仪或数码相机的传感器和电路产生的,也可能是受胶片颗粒或者理想光电探测器中不可避免的的散粒噪声影响产生的。图像噪声是图像拍摄过程中不希望存在的副产品,给图像带来了错误和额外的信息。见:点这

16、小概率出现这种:
在这里插入图片描述
解决办法是改成:cv::waitKey(30);
见:https://dwz.cn/4tchUK5c

17、通过进入morphologyEx()函数中的标识符的定义,发现了定义中有一个MORPH_HITMISS书上没有讲,百度了一下,见:https://dwz.cn/m2fsktQQ

18、compare()函数:https://dwz.cn/Cl7Uq9KM

19、矩阵归一化:归一化就是要把需要处理的数据经过处理后(通过某种算法)限制在你需要的一定范围内。首先归一化是为了后面数据处理的方便,其次是保证程序运行时收敛加快。归一化的具体作用是归纳统一样本的统计分布性。归一化在0-1之间是统计的概率分布,归一化在某个区间上是统计的坐标分布。归一化有同一、统一和合一的意思。https://dwz.cn/5gSkEPql

20、RotatedRect函数:RotatedRect是一个存储旋转矩形的类,通常用来存储最小外包矩形函数minAreaRect( )和椭圆拟合函数fitEllipse( )返回的结果。存储的值,完全取决在于函数的返回。见:https://dwz.cn/eb3fqGoY
如果用椭圆拟合注意:
在这里插入图片描述

参见:https://dwz.cn/6Q2unMdn

21、C++ const修饰函数、函数参数、函数返回值。见:https://dwz.cn/tYmG2IuW

22、fillPoly函数:用于填充。见:https://dwz.cn/qvjJ9bz1

23、椭圆拟合fitEllipse:https://dwz.cn/6tvObHzm

24、Opencv Mat矩阵中data、size等属性的理解: https://blog.csdn.net/dcrmg/article/details/52294259

25、OpenCV boundingRect 与 boundingRect 用法:https://dwz.cn/j4cca9LB
https://dwz.cn/otDn9j8J

26、单通道8位图像:在记录数字图像的颜色时,计算机实际是用每个像素需要的位深度来表示的,黑白二色的图像是数字图像中最简单的一种,它只有黑、白两种颜色,也就是说它的每个像素只有1位颜色,位深度是1,用2的一次幂来表示;考虑到位深度平均分给R、G、B和Alpha,而只有RGB可以互相组合成颜色。所以4为颜色的图,它的位深度是4,只有2的四次幂种颜色,即16种颜色(或灰度级)。8位颜色的图,位深度是8,用2的8次幂表示,含有256种颜色(或灰度级)。24位颜色可称之为真彩色,位深度是24,含有2的24次幂种颜色(或灰度级),即:16777216种颜色,超过了人眼能够分辨的颜色数量。当我们用24位来记录颜色时,实际上是以2的3*8次幂,即R、G、B各以2的8次幂,256种颜色而存在,三色组合就形成了16777216种颜色。8位二进制等于1字节,16位二进制等于2字节,32位二进制等于4字节。一般人眼很难看出1/256亮度的变化,何况256的平方分之一,所以通常显示器只能显示256个灰阶,16777216种颜色。虽然计算机的显示屏只能显示一定分辨率的色阶,但是将存储的图像转换成位数高的图像,能够对转换后的图像进行处理得到更精确的数据,针对于8位、16位、32位单通道图像而言表示的不同程度的灰度级,随之相应的精度也不同,表示的位数越高图像的分辨率越高,对图像进行相应的处理就越精确。https://dwz.cn/oKy99v8I

27、copy和clone的区别: OpenCV中的clone()和直接赋值都会导致共享数据区,也就是相当于&。而使用copy,才会获取新的Mat。见:https://dwz.cn/gm1H0aoy

28、addWeighted()函数细讲:https://dwz.cn/KRru4gEp

29、convertScaleAbs()函数:用于实现对整个图像数组中的每一个元素,进行如下操作:在这里插入图片描述

见:https://dwz.cn/AzdrKaBn

30、关于size_t:size_t 类型定义在cstddef头文件中,该文件是C标准库的头文件stddef.h的C++版。它是一个与机器相关的unsigned类型,其大小足以保证存储内存中对象的大小。例如:bitset的size操作返回bitset对象中二进制位中1的个数,返回值类型是size_t。例如:在用下标访问元素时,vector使用vector::size_type作为下标类型,而数组下标的正确类型则是size_t。vector使用的下标实际也是size_t,源码是typedef size_t size_type。详见百科:https://dwz.cn/L6luFV6y

31、卷积和核:卷积:高度概括地说,卷积是在每一个图像块与某个算子(核)之间进行的运算。核:核说白了就是一个固定大小的数值数组。该数组带有一个 锚点 ,一般位于数组中央。详见:https://dwz.cn/6X9zdOGt

32、记录时间:

double time0 = static_cast<double>(getTickCount());//记录起始时间
//
time0 = ((double)getTickCount() - time0) / getTickFrequency();
cout << "运行时间为:" << time0 << "秒" << endl;

33、关于像素和分辨率等问题:
https://www.cnblogs.com/cjm123/p/8084642.html

34、文字putText(): 在这里插入图片描述

35、line: https://dwz.cn/lsO0iccK

36、circle:https://dwz.cn/WWB37zab

37、Mat相关知识:https://dwz.cn/nClkr1UZ

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: OpenCV一个开源的计算机视觉和机器学习库,可以方便地处理图像和视频。而CUDA(Compute Unified Device Architecture)是由NVIDIA开发的一种并行计算架构,可以加速图形处理器(GPU)上的计算任务。 OpenCV 4.5.1是OpenCV一个版本,它提供了丰富的功能和算法,用于图像和视频处理、特征提取、目标检测等任务。这个版本可以在Windows 10操作系统上使用,并且可以与Visual Studio 2017集成,提供开发环境和调试工具。 CUDA 10.0是NVIDIA的一个版本,它支持NVIDIA GPU上的并行计算任务。它允许开发人员使用C语言、C++或CUDA自己的扩展语言编写并行计算代码,以加速计算密集型任务。例如,在图像处理,可以使用CUDA加速OpenCV算法,从而提高计算性能。 而cuDNN(CUDA Deep Neural Network library)是NVIDIA专门为深度学习任务开发的一个库。它提供了一组高性能的深度神经网络的基本操作和优化算法,可以与CUDA和OpenCV结合使用。 综上所述,OpenCV 4.5.1可以与CUDA 10.0和cuDNN 7.6.0集成使用。开发者可以在Visual Studio 2017使用这些工具和库进行图像处理和机器学习任务的开发和优化。通过使用CUDA加速,可以提高计算性能,而cuDNN可以提供深度学习任务所需的算法和操作。 ### 回答2: OpenCV 4.5.1是一个计算机视觉库,用于在计算机视觉和机器学习项目进行图像和视频处理。VS2017一个集成开发环境(IDE),用于Windows操作系统上的软件开发。CUDA(Compute Unified Device Architecture)是一个用于GPU计算的并行计算平台和API模型。CUDNN是NVIDIA深度神经网络库,用于在GPU上加速深度学习任务。 在Windows 10上使用VS2017来编译OpenCV 4.5.1,并在CUDA 10.0和CUDNN 7.6.0的支持下进行构建可以提供更好的计算性能和加速。CUDA 10.0提供了与CUDA架构和驱动程序的兼容性,并支持许多NVIDIA GPU。CUDNN 7.6.0是基于CUDA的深度神经网络库,可以加速深度学习任务的训练和推理。 使用VS2017编译OpenCV可以让开发者方便地在Windows平台上进行开发和调试。VS2017提供了强大的集成开发环境,它可以帮助开发者编写、调试和测试程序。通过配置CUDA 10.0和CUDNN 7.6.0来支持OpenCV的GPU加速,可以进一步提高图像和视频处理的速度和效率。 总结来说,使用OpenCV 4.5.1、VS2017、Windows 10、CUDA 10.0和CUDNN 7.6.0可以实现在Windows平台上的高效计算机视觉和机器学习开发。这种配置可以提供更好的性能和加速,特别是在需要处理大量图像和视频、进行深度学习任务的情况下。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值