1、OpenCV中cv::Mat的深拷贝和浅拷贝问题?
深拷贝
:分配新内存的同时拷贝数据,当被赋值的容器被修改时,原始容器数据不会改变。浅拷贝
:仅拷贝数据,当被赋值容器修改时,原始容器数据也会做同样改变。
深拷贝是 b = a.clone(); 和 a.copyTo(b);
浅拷贝是 b = a;和 b(a);
2、边缘检测的流程是什么?
1) 使用高斯滤波器,以平滑图像,滤除噪声。
2) 计算图像中每个像素点的梯度强度和方向。
3) 应用非极大值(Non-Maximum Suppression)抑制,以消除边缘检测带来的杂散响应。
4) 应用双阈值(Double-Threshold)检测来确定真实的和潜在的边缘。
5) 通过抑制孤立的弱边缘最终完成边缘检测。
3、opencv中RGB2GRAY是如何实现的?
在OpenCV中,RGB2GRAY的转换是通过寻找一个从三维空间到一维空间的映射来实现的。这个映射基于RGB色彩空间的基础,即叠加型三原色(红绿蓝)的应用。具体实现时,使用了一个公式来完成这种映射:Gray = 0.29900×R + 0.58700×G + 0.11400×B。
4、连续图像转化为数字图像需要进行哪些操作?
- 取样:取样是将图像空间坐标进行离散化的过程。
- 量化:量化是将图像中每个像素的灰度级别或颜色信息进行离散化的过程。
采样后的图像虽然在空间分布上是离散的,但各个像素的取值还是连续的,因此需要将这些连续变化的量转化为有限的离散值。量化就是把采样区域内表示亮暗信息的连续点离散化后,再用数值来表示,一般的量化值都为整数。
5、数字图像中有哪些特征?
空间特征;颜色特征;纹理特征;频域关系特征;
6、Opencv中的图像类型和深度有哪些?
OpenCV中的图像类型和深度是通过Mat对象的数据类型来定义的。这个数据类型是由两部分组成:数据的深度(即数据类型)和通道数。数据的深度决定了每个像素可以表示的值的范围和精度,而通道数决定了图像可以包含的颜色信息量。
图像深度:
在OpenCV中,图像深度是指每个像素值的位数。常见的图像深度包括:
CV_8U:8位无符号整数(0-255)。这是最常见的图像类型,用于标准的灰度图或彩色图像。
CV_8S:8位有符号整数(-128到127)。
CV_16U:16位无符号整数(0-65535)。用于更高动态范围的图像。
CV_16S:16位有符号整数(-32768到32767)。
CV_32S:32位有符号整数。
CV_32F:32位浮点数。这种类型常用于更复杂的图像处理,如图像转换时的小数点操作。
CV_64F:64位浮点数。提供了更高的精度,用于精确的科学计算。
7、几何变换有哪些?
平移变换、旋转变换、缩放变换、对称变换、错切变换、投影变换、仿射变换、透视变换;
8、图像插值方法有哪些?
图像插值方法主要有以下几种:
- 最近邻插值法:这是最简单的一种插值方法,不需要计算。在待求像素的四邻像素中,将距离待求像素最近的邻像素灰度赋给待求像素。这种方法计算量较小,但可能会造成插值生成的图像灰度上的不连续,在灰度变化的地方可能出现明显的锯齿状。
- 双线性插值:首先在x方向上进行线性插值,然后在y方向上进行线性插值。这种方法可以得到比最近邻插值更平滑的图像,但可能仍然会丢失一些高频信息。
9、图像锐化是什么?
图像锐化是一种图像处理技术,用于补偿图像的轮廓,增强图像的边缘及灰度跳变的部分,从而使图像变得清晰。这种处理主要分为空间域处理和频域处理两类。图像锐化的目的是突出图像上物体的边缘、轮廓,或某些线性目标要素的特征。这种滤波方法提高了物体边缘与周围像元之间的反差,因此也被称为边缘增强。
10、监督学习和非监督学习的区别是什么?
-
数据标签:监督学习使用的是带有标签的数据,这些数据已经标注了正确的答案或结果。非监督学习则使用没有标签的数据,模型需要自行发现数据中的结构和模式。
-
学习目标:监督学习的目标是预测结果或分类,基于已有标签进行学习。非监督学习的目标是发现数据中的隐藏结构,例如将数据点分组或降维。
-
应用场景:监督学习常用于图像分类、语音识别等需要明确结果的场景。非监督学习则适用于无先验知识的场景,如社交网络分析、市场细分等。
11、简述聚类算法?
聚类算法是一种无监督学习方法,主要用于将相似的样本自动归到一个类别中。它按照某个特定标准(如距离准则)将数据集分割成不同的类或簇,使得同一个簇内的数据对象的相似性尽可能大,同时不在同一个簇中的数据对象的差异性也尽可能地大。换言之,聚类后同一类的数据会尽可能聚集到一起,不同类数据尽量分离。
11、简述目标检测算法?
目标检测算法的主要任务是识别图像或视频中的目标物体,并确定其位置。这些算法通常分为传统方法和基于深度学习的方法两大类。
传统方法,如Adaboost+Harr和HOG+SVM,通常涉及到穷举搜索框、设置目标大小范围和高宽比例、提取特征(如HOG、Harr、LBP等)以及过分类器(如Adaboost、SVM等)进行最终分类等步骤。这种方法虽然在一定程度上能够完成目标检测任务,但效率较低,且对于复杂场景和多变的目标形态,其检测效果可能并不理想。
基于深度学习的目标检测算法则更为先进和高效。这些算法大体上可以分为Two Stage和One Stage两类。
Two Stage方法首先生成候选区域(Region Proposal),这些区域可能包含待检物体。然后,通过卷积神经网络对这些区域进行样本分类和位置精修。代表性的Two Stage算法有R-CNN系列,R-FCN等。其中,R-CNN算法通过将深度学习引入目标检测领域,大大提高了检测精度。然而,Two Stage方法通常计算量较大,处理速度较慢。
One Stage方法则直接在网络中提取特征来预测物体分类和位置,无需生成候选区域。常见的One Stage目标检测算法有YOLO系列算法、SSD系列算法等。这些方法处理速度快,实时性好,但在检测精度上可能稍逊于Two Stage方法。
12、简述分类算法?
分类算法是通过对已知类别训练集的计算和分析,从中发现类别规则并预测新数据的类别。分类算法的目的是将数据集中的每个样本映射到一个或多个预定义的类别中。
13、简述分割算法?
14、图像增强的方法有哪些?
- 灰度变换增强:这是一种在空间域内对图像进行增强的简单而有效的方法。灰度变换增强不改变原图像中像素的位置,只改变像素点的灰度值,并逐点进行,和周围的其他像素点无关。通过选择不同的灰度变换函数,如正比函数和指数函数等,可以有效地增强图像的对比度或亮度。
- 直方图增强:直方图均衡化是直方图增强的一种常用方法。它的基本思想是把原始图像的直方图变换为均匀分布的形式,从而增强图像灰度的变化范围,达到增强图像对比度的效果。此外,还有直方图规定化等方法,可以通过改变图像的直方图的形态来改变图像的对比度。
- 图像平滑:这主要是对图像进行滤波处理,以减少图像噪声,改善图像质量。平滑滤波方法包括方框滤波、均值滤波、高斯滤波等线性滤波方法,以及中值滤波、双边滤波等非线性滤波方法。
- 图像锐化:锐化是一种增强图像边缘和细节的方法,通过强调图像中的高频分量来实现。
- 伪彩色增强:将灰度图像转化为彩色图像,以便于人眼观察和识别。
- 频域增强:在图像的变换域(即频域)内对图像的变换系数进行运算,然后通过逆变换获得图像增强效果。这包括低通滤波、高通滤波、带通滤波和同态滤波等方法。
15、高斯滤波器的原理是什么?
16、卷积层、池化层和全连接层的作用分别是什么?
卷积层的作用:通过卷积操作提取输入图像中的局部特征,并通过参数共享的方式降低模型的复杂度和计算量,提高模型的效率和泛化能力。
池化层的作用:通过对卷积层输出的特征图进行下采样操作,如最大池化或平均池化,来减少特征的数量和计算量,同时保留最重要的特征信息。
全连接层的作用:将卷积层和池化层学习到的分布式特征表示整合起来,并映射到具体的输出空间。全连接层通过权重矩阵和偏置项,将前一层的神经元与当前层的所有神经元进行连接,从而提取全局特征并进行分类或回归。
17、过拟合是什么?欠拟合是什么?如何改善?
过拟合指的是模型在训练数据上表现过于优秀,但在测试数据或实际应用中性能较差的情况。欠拟合则是指模型在训练数据和测试数据上的表现都不好。为了改善过拟合和欠拟合,可以采取以下策略:
- 针对过拟合:
- 简化模型:减少模型的复杂度,例如减少神经网络的层数或神经元的数量。
- 正则化:通过在损失函数中引入正则项(如L1或L2正则化),来惩罚模型的复杂度,防止其过于复杂。
- 数据扩增:通过增加训练数据的数量或多样性,来使模型有更多的机会学习到数据的内在规律,而不是记住噪声。
- 早停法:在模型训练过程中,当验证集上的性能开始下降时,提前停止训练,以避免过拟合。
- 使用Dropout:在训练过程中,随机丢弃一部分神经元的输出,以减少神经元之间的复杂共适应性。
- 针对欠拟合:
- 增加模型复杂度:例如,增加神经网络的层数或神经元的数量。
- 特征工程:尝试提取或构造更多的特征,以帮助模型更好地捕捉数据的内在规律。
- 更长的训练时间:确保模型有足够的时间在训练数据上进行学习。
- 使用更复杂的模型:例如,从线性回归模型切换到决策树或神经网络等更复杂的模型。
18、彩色图像、灰度图像、二值图像和索引图象的区别是什么?
- 彩色图像:每个像素由红(R)、绿(G)、蓝(B)三个分量表示,每个通道取值范围0~255。数据类型一般为8位无符号整形。这种图像能够呈现出丰富的色彩和细节,适用于需要展示真实色彩的场景,如摄影、设计等领域。
- 灰度图像:每个像素只有一个采样颜色,图像显示为从最暗黑色到最亮的白色的灰度。灰度图像通常是在单个电磁波频谱如可见光内测量每个像素的亮度得到的,用于显示的灰度图像通常用每个采样像素8位的非线性尺度来保存,这样可以有256级灰度(如果用16位,则有65536级)。灰度图像虽然不如彩色图像色彩丰富,但能够保留图像的亮度信息和一定的细节,适用于对颜色要求不高但需要保留亮度信息的场景,如医学影像处理、文字识别等。
- 二值图像(黑白图像):每个像素点只有两种可能,0和1,其中0代表黑色,1代表白色。数据类型通常为1个二进制位。这种图像只包含黑色和白色两种颜色,信息简单明了,适用于对图像进行二值化处理或需要突出特定区域的场景,如文字识别、边缘检测等。
- 索引图像:它的文件结构比较复杂,除了存放图像的二维矩阵外,还包括一个称之为颜色索引矩阵MAP的二维数组。索引图像是为了解决彩色图像消耗空间大的问题而设计的,通常应用于色彩构成比较简单的场景。它使用颜色索引矩阵来映射图像中的像素颜色,能够节省存储空间并加速图像处理过程。
19、简述膨胀和腐蚀操作?
膨胀和腐蚀操作的原理主要基于图像像素值与其邻域像素值之间的关系。这两种操作在处理二值图像时特别有效,其中像素值通常只有0和1,分别代表黑色和白色。
膨胀操作的原理:膨胀操作的基本思想是对图像中的高亮部分(通常是白色像素)进行扩张。具体来说,膨胀操作使用一个结构元素(或称为卷积核)在图像上进行滑动。对于每一个像素位置,结构元素会覆盖该像素及其邻域。如果结构元素覆盖下的像素中有任何一个是高亮的(即值为1),则输出图像中对应位置的像素也被标记为高亮。这个过程会持续进行,直到整个图像都被处理完毕。由于只要结构元素覆盖范围内有任意一个高亮像素,输出图像对应位置就会是高亮,因此膨胀操作可以有效地将物体边界向外扩张,填充孔洞,甚至连接原本分离的物体。
腐蚀操作的原理:与膨胀相反,腐蚀操作的基本思想是对图像中的高亮部分进行缩减。同样,腐蚀操作也使用一个结构元素在图像上进行滑动。但是,对于每一个像素位置,只有当结构元素覆盖下的所有像素都是高亮的时,输出图像中对应位置的像素才会被标记为高亮。如果结构元素覆盖范围内有任何一个像素不是高亮的,那么输出图像对应位置就会被标记为黑色。由于要求结构元素覆盖的所有像素都是高亮的,腐蚀操作会消除物体的边界点,使物体区域向内收缩,从而消除小于结构元素的噪声点或细节。
综上,膨胀和腐蚀操作的原理都是基于像素值与其邻域像素值之间的关系,并通过使用结构元素在图像上进行滑动来实现对图像中物体区域的扩张或缩减。
20、简述开运算和闭运算?
开运算是对图像先进行腐蚀操作,再进行膨胀操作。开运算的主要作用是消除图像中的孤立小点、毛刺和小桥,同时保持总体的位置和形状不变。其结果是完全删除了不能包含结构元素的对象区域,平滑了对象的轮廓,断开了狭窄的连接,去掉了细小的突出部分。在图像处理中,开运算常用于去除噪声和断开连接的物体。
闭运算则是对图像先进行膨胀操作,再进行腐蚀操作。闭运算的主要作用是填平图像中的小孔或弥合小裂缝,同时保持总的位置和形状不变。闭运算通常能够填充前景物体中的小洞或抹去前景物体上的小黑点。其结果是平滑对象的轮廓,但不同于开运算的是,闭运算一般会将狭窄的缺口连接起来形成细长的弯口,并填充比结构元素小的洞。
21、金字塔的作用?怎么实现的?
作用:为了解决多尺度检测问题;
实现:先将图像下采样,然后再上采样做特征图融合,融合过程中不同尺度的特征图进行预测。
22、AP 和mAP 是什么?
AP : 单个类别的精度;
mAP: 就是平均精度;
23、pytorch中的gather函数?
gather的作用是根据索引查找,然后将查找结果以张量矩阵的形式返回;
24、输入多尺度图像怎么做到统一输出的?
图像缩放,图像填充,图像裁剪(大图像随机裁剪成小图像),图像金字塔(FPN)多尺度融合
25、yolo中用了几种数据增强?
随机缩放和裁剪,随机旋转, 随机水平翻转,
颜色扰动: 对图像进行随机的颜色变换,例如亮度、对比度、饱和度的调整,以增加数据的多样性 。
随机位移: 对图像中的目标进行随机的平移操作,这可以模拟目标在图像中不同位置出现的情况。mix-up,cut-up,mix-cut,mosic
26、目标框常见损失?
27、怎么在原有的基础上提升准确率?
28、BN层作用?
29、为什么BN层一般在线性层或卷积层后,而不放在激活单元后?
30、tensorrt和openvino接口的不同之处?
31、常用的边缘提取方式有哪些?
32、梯度下降法找到的一定是下降最快的方向吗?
33、计算图片的相似度的方法有哪些?
34、opencv常用数据结构和函数?
point(点)、Scalar(颜色)、Size(尺寸)、cvtColor函数(颜色空间转换)
35、图像处理包括什么?
图像处理:包括图像的基本操作(如剪切、缩放、旋转)、颜色空间转换、滤波、边缘检测等。
36、OpenCV中的图像二值化是什么,如何实现?
图像二值化是图像处理中的一种常见技术,其目的是将图像转换为只包含两种像素值(通常是黑白两色)的形式。在二值化过程中,根据特定的阈值将所有像素点分为两组,一组的像素值设置为最大值(通常为255,代表白色),另一组设置为最小值(通常为0,代表黑色)。
在OpenCV中,可以使用cv2.threshold()
函数来实现图像二值化。
37、什么是图像的直方图,如何在OpenCV中计算和均衡化直方图?
38、 什么是特征检测和描述,OpenCV中常见的特征检测算法有哪些?
39、进一步解释OpenCV中的SIFT、SURF和ORB算法。
40、OpenCV中如何进行模板匹配?
41、高斯噪声和椒盐噪声?
42、在OpenCV中,如何处理和分析视频序列?
43、OpenCV中的透视变换和仿射变换有什么区别?
44、如何在OpenCV中实现实时人脸识别?
45、OpenCV中的光流法是什么,它通常用于哪些类型的任务?
46、解释OpenCV中的Blob检测,以及它的应用。
47、OpenCV中的图像配准是什么,它的应用场景有哪些?
48、什么是OpenCV中的图像融合,如何实现?
49、OpenCV支持哪些类型的文件格式读写?
50、在OpenCV中如何处理图像的噪声和滤波?
感谢博主:图像算法工程师面试--八股文 - 知乎
感谢博主:pytorch中的gather()函数_.gather()-CSDN博客
感谢博主:图像特征金子塔的作用?怎么实现的?_图像特征金字塔的作用?怎么实现的?-CSDN博客
感谢博主:高斯滤波器的原理及其实现过程 - 知乎
感谢博主:【图像增强】常见的图像增强算法-CSDN博客
感谢博主:面试问题总结——关于OpenCV_opencv面试题-CSDN博客
感谢博主:Canny边缘检测算法的流程_canny算法流程图-CSDN博客
感谢博主:【OpenCV】RGB2GRAY原理_opencv rgb 2 grey 系数-CSDN博客
感谢博主: opencv面试知识点_opencv面试题-CSDN博客
感谢博主:人工智能算法工程师面试题——之OpenCV必背汇总(一)_opencv常见面试题-CSDN博客