![](https://img-blog.csdnimg.cn/6e43c99236154469b2ac26aee3270dca.jpg?x-oss-process=image/resize,m_fixed,h_224,w_224)
一周实现OpenCV与图像图形处理(含代码)
文章平均质量分 91
OpenCV与图像图形处理OpenCV与图像图形处理OpenCV与图像图形处理OpenCV与图像图形处理
布尔大学士
工学博士在读,主要从事智能制造、工业精密检测、智能化设备研发等方向研究,已发表二区Top文章一篇、国家级竞赛二等奖一项、已授权软件著作权两项、已发表中文期刊两篇,先后参与国家自然科学基金面上项目、省重点研发计划等课题。
展开
-
OpenCV_01 简介+无版权安装+模块分析
OpenCV是应用广泛的开源图像处理库,我们以其为基础,介绍相关的图像处理方法:包括基本的图像处理方法:几何变换,形态学变换,图像平滑,直方图操作,模板匹配,霍夫变换等;特征提取和描述方法:理解角点特征,Harris和Shi-Tomas算法,SIFT/SURF算法,Fast算法,ORB算法等;还有OpenCV在视频操作中的应用,最后的案例是使用OpenCV进行人脸检测。1.1 图像是什么图像是人类视觉的基础,是自然景物的客观反映,是人类认识世界和人类本身的重要源泉。“图”是物体反射或透射光的分.原创 2021-12-13 21:11:15 · 5321 阅读 · 0 评论 -
OpenCV_02 图像的基本操作:图像IO+绘制图形+像素点+属性+图像通道+色彩空间的改变
1 图像的IO操作这里我们会给大家介绍如何读取图像,如何显示图像和如何保存图像。1.1 读取图像APIcv.imread()参数: 要读取的图像 读取方式的标志 cv.IMREAD*COLOR:以彩色模式加载图像,任何图像的透明度都将被忽略。这是默认参数。 cv.IMREAD*GRAYSCALE:以灰度模式加载图像 cv.IMREAD_UNCHANGED:包括alpha通道的加载图像模式。 可以使用1、0或者-1来替代上面原创 2021-12-13 22:04:18 · 3059 阅读 · 0 评论 -
OpenCV_03 图像的算数操作:图像的加法+图像的混合
1.图像的加法你可以使用OpenCV的cv.add()函数把两幅图像相加,或者可以简单地通过numpy操作添加两个图像,如res = img1 + img2。两个图像应该具有相同的大小和类型,或者第二个图像可以是标量值。注意:OpenCV加法和Numpy加法之间存在差异。OpenCV的加法是饱和操作,而Numpy添加是模运算。参考以下代码:>>> x = np.uint8([250])>>> y = np.uint8([10])>>>原创 2021-12-14 17:06:18 · 2536 阅读 · 0 评论 -
OpenCV_04 几何变换:图像缩放+图像平移+图像旋转+仿射变换+透射变换+图像金字塔
1 图像缩放缩放是对图像的大小进行调整,即使图像放大或缩小。 API cv2.resize(src,dsize,fx=0,fy=0,interpolation=cv2.INTER_LINEAR) 参数: src : 输入图像 dsize: 绝对尺寸,直接指定调整后图像的大小 fx,fy: 相对尺寸,将dsize设置为None,然后将fx和fy设置为比例因子即可 interpolation:插值方法原创 2021-12-14 18:35:18 · 4218 阅读 · 0 评论 -
OpenCV_05 形态学操作:连通性+腐蚀和膨胀+开闭运算+礼帽和黑帽
1 连通性在图像中,最小的单位是像素,每个像素周围有8个邻接像素,常见的邻接关系有3种:4邻接、8邻接和D邻接。分别如下图所示: 4邻接:像素p(x,y)的4邻域是:(x+1,y);(x-1,y);(x,y+1);(x,y-1),用N4(p)表示像素p的4邻接 D邻接:像素p(x,y)的D邻域是:对角上的点 (x+1,y+1);(x+1,y-1);(x-1,y+1);(x-1,y-1),用ND(p)表示像素p的D邻域 8邻接:像素p(x,y)的8邻域是: .原创 2021-12-14 20:16:45 · 7119 阅读 · 1 评论 -
OpenCV_06 图像平滑:图像噪声+图像平滑+滤波
1 图像噪声由于图像采集、处理、传输等过程不可避免的会受到噪声的污染,妨碍人们对图像理解及分析处理。常见的图像噪声有高斯噪声、椒盐噪声等。1.1 椒盐噪声椒盐噪声也称为脉冲噪声,是图像中经常见到的一种噪声,它是一种随机出现的白点或者黑点,可能是亮的区域有黑色像素或是在暗的区域有白色像素(或是两者皆有)。椒盐噪声的成因可能是影像讯号受到突如其来的强烈干扰而产生、类比数位转换器或位元传输错误等。例如失效的感应器导致像素值为最小值,饱和的感应器导致像素值为最大值。1.2 高斯噪声.原创 2021-12-14 20:51:49 · 4200 阅读 · 0 评论 -
OpenCV_07 直方图:灰度直方图+直方图均衡化
1 灰度直方图1.1 原理直方图是对数据进行统计的一种方法,并且将统计值组织到一系列实现定义好的 bin 当中。其中, bin 为直方图中经常用到的一个概念,可以译为 “直条” 或 “组距”,其数值是从数据中计算出的特征统计量,这些数据可以是诸如梯度、方向、色彩或任何其他特征。 图像直方图(Image Histogram)是用以表示数字图像中亮度分布的直方图,标绘了图像中每个亮度值的像素个数。这种直方图中,横坐标的左侧为较暗的区域,而右侧为较亮的区域。因此一张较暗图片的直方图中的数据多集中于左原创 2021-12-14 21:34:07 · 4922 阅读 · 0 评论 -
OpenCV_08 边缘检测:Sobel检测算子+Laplacian算子+Canny边缘检测
1 原理边缘检测是图像处理和计算机视觉中的基本问题,边缘检测的目的是标识数字图像中亮度变化明显的点。图像属性中的显著变化通常反映了属性的重要事件和变化。边缘的表现形式如下图所示:图像边缘检测大幅度地减少了数据量,并且剔除了可以认为不相关的信息,保留了图像重要的结构属性。有许多方法用于边缘检测,它们的绝大部分可以划分为两类:基于搜索和基于零穿越。 基于搜索:通过寻找图像一阶导数中的最大值来检测边界,然后利用计算结果估计边缘的局部方向,通常采用梯度的方向,并利用此方向找到局部梯度模的最大值,代原创 2021-12-14 22:13:39 · 3973 阅读 · 0 评论 -
OpenCV_09 模版匹配和霍夫变换:霍夫线检测+霍夫圆检测
1 模板匹配1.1 原理所谓的模板匹配,就是在给定的图片中查找和模板最相似的区域,该算法的输入包括模板和图片,整个任务的思路就是按照滑窗的思路不断的移动模板图片,计算其与图像中对应区域的匹配度,最终将匹配度最高的区域选择为最终的结果。实现流程: 准备两幅图像: 1.原图像(I):在这幅图中,找到与模板相匹配的区域 2.模板(T):与原图像进行比对的图像块补充补充补充补充补充补充补充补充补充补充补充补充图图图 滑动模板图像和原图像进行比对:补充补充补充补充补充补充补充原创 2021-12-15 11:13:05 · 2680 阅读 · 0 评论 -
OpenCV_10 傅里叶变换:频域滤波+CV的应用
1 傅里叶变换的理解傅里叶变换是由法国的一位数学家Joseph Fourier在18世纪提出来的,他认为:任何连续周期的信号都可以由一组适当的正弦曲线组合而成。傅里叶变换是描述信号的需要,它能够反映信号的特征,并可以使用特征值进行量化,比如正弦波可以使用幅值和频率进行描述。下面这幅图是变压器空载电流的输入波形:它看起来和正弦波很相近,但很难定量的描述其特征,采用傅里叶变换后,得到下述的频谱图(幅值):从该频谱图中可以清楚的看到,主要包括3,5,7,9次谐波,我们就可以对原信号原创 2021-12-15 15:29:48 · 5298 阅读 · 2 评论 -
OpenCV_11 轮廓检测:图像的轮廓+绘制轮廓+轮廓近似+边界矩形+椭圆拟合+直线拟合
1 图像的轮廓轮廓可以简单认为成将连续的点(连着边界)连在一起的曲线,具有相同的颜色或者灰度。轮廓是图像目标的外部特征,这种特征对于我们进行图像分析,目标识别和理解等更深层次的处理都有很重要的意义。轮廓提取的基本原理:对于一幅背景为黑色、目标为白色的二值图像,如果在图中找到一个白色点,且它的8邻域(或4邻域)也均为白色,则说明该点是目标的内部点,将其置为黑色,视觉上就像内部被掏空一样;否则保持白色不变,该点是目标的轮廓点。一般在寻找轮廓之前,都要将图像进行阈值化或Canny边缘检测,转换为二值化图像原创 2021-12-15 17:29:15 · 21367 阅读 · 1 评论 -
OpenCV_12 图像分割:全阈值分割+自适应阈值分割+Otsu 阈值(大津法)+分水岭算法+GraphCut+GrabCut
1 图像分割所谓图像分割指的是根据灰度、颜色、纹理和形状等特征把图像划分成若干互不交迭的区域,并使这些特征在同一区域内呈现出相似性,而在不同区域间呈现出明显的差异性。我们先对目前主要的图像分割方法做个概述,后面再对个别方法做详细的了解和学习。1、基于阈值的分割方法阈值法的基本思想是基于图像的灰度特征来计算一个或多个灰度阈值,并将图像中每个像素的灰度值与阈值相比较,最后将像素根据比较结果分到合适的类别中。因此,该类方法最为关键的一步就是按照某个准则函数来求解最佳灰度阈值。2、基于边缘的分割方法原创 2021-12-15 18:06:15 · 10830 阅读 · 0 评论 -
图像特征提取与描述_角点特征01:Harris算法+Shi-Tomas算法
1 Harris角点检测1.1 原理Harris角点检测的思想是通过图像的局部的小窗口观察图像,角点的特征是窗口沿任意方向移动都会导致图像灰度的明显变化,如下图所示:将上述思想转换为数学形式,即将局部窗口向各个方向移动(u,v)并计算所有灰度差异的总和,表达式如下:其中I(x,y)是局部窗口的图像灰度,I(x+u,y+v)是平移后的图像灰度,w(x,y)是窗口函数,该可以是矩形窗口,也可以是对每一个像素赋予不同权重的高斯窗口,如下所示:角点检测中使E(u,v)的值最大。利用一阶.原创 2021-12-18 20:56:19 · 2785 阅读 · 0 评论 -
图像特征提取与描述_角点特征02:SIFT算法+SURF算法
SIFT/SURF算法1.1 SIFT原理前面两节我们介绍了Harris和Shi-Tomasi角点检测算法,这两种算法具有旋转不变性,但不具有尺度不变性,以下图为例,在左侧小图中可以检测到角点,但是图像被放大后,在使用同样的窗口,就检测不到角点了。所以,下面我们来介绍一种计算机视觉的算法,尺度不变特征转换即SIFT (Scale-invariant feature transform)。它用来侦测与描述影像中的局部性特征,它在空间尺度中寻找极值点,并提取出其位置、尺度、旋转不变量,此算法原创 2021-12-18 21:55:04 · 3426 阅读 · 0 评论 -
图像特征提取与描述_角点特征03:Fast算法+ORB算法
1 Fast算法1.1 原理我们前面已经介绍过几个特征检测器,它们的效果都很好,特别是SIFT和SURF算法,但是从实时处理的角度来看,效率还是太低了。为了解决这个问题,Edward Rosten和Tom Drummond在2006年提出了FAST算法,并在2010年对其进行了修正。FAST(全称Features from accelerated segment test)是一种用于角点检测的算法,该算法的原理是取图像中检测点,以该点为圆心的周围邻域内像素点判断检测点是否为角点,通俗的讲就是若.原创 2021-12-18 22:38:13 · 5184 阅读 · 0 评论 -
图像特征提取与描述_角点特征04:LBP算法+HOG特征算子
1.LBP算法LBP(Local Binary Pattern)指局部二值模式,是一种用来描述图像局部特征的算子,LBP特征具有灰度不变性和旋转不变性等显著优点。它是由T. Ojala, M.Pietikäinen, 和 D. Harwood在1994年提出,由于LBP特征计算简单、效果较好,因此LBP特征在计算机视觉的许多领域都得到了广泛的应用。1.1 LBP特征描述原始的LBP算子定义为在$33$的窗口内,以窗口中心像素为阈值,将相邻的8个像素的灰度值与其进行比较,若周围像素值大于中心像素值原创 2021-12-21 21:50:52 · 3554 阅读 · 0 评论 -
视频操作_01视频读写:视频读写+读取视频+保存视频
1 从文件中读取视频并播放在OpenCV中我们要获取一个视频,需要创建一个VideoCapture对象,指定你要读取的视频文件:1.创建读取视频的对象cap = cv.VideoCapture(filepath)参数:filepath: 视频文件路径2.视频的属性信息2.1. 获取视频的某些属性,retval = cap.get(propId)参数:propId: 从0到18的数字,每个数字表示视频的属性常用属性有:2.2 修改视频...原创 2021-12-22 13:06:01 · 3805 阅读 · 1 评论 -
视频操作_02视频追踪:meanshift算法+Camshift算法
1.meanshift1.1原理meanshift算法的原理很简单。假设你有一堆点集,还有一个小的窗口,这个窗口可能是圆形的,现在你可能要移动这个窗口到点集密度最大的区域当中。如下图:最开始的窗口是蓝色圆环的区域,命名为C1。蓝色圆环的圆心用一个蓝色的矩形标注,命名为C1_o。而窗口中所有点的点集构成的质心在蓝色圆形点C1_r处,显然圆环的形心和质心并不重合。所以,移动蓝色的窗口,使得形心与之前得到的质心重合。在新移动后的圆环的区域当中再次寻找圆环当中所包围点集的质心,然后再次移动,原创 2021-12-22 14:00:58 · 3085 阅读 · 0 评论 -
人脸识别案例:【实战】opencv人脸检测+Haar特征分类器
1 基础我们使用机器学习的方法完成人脸检测,首先需要大量的正样本图像(面部图像)和负样本图像(不含面部的图像)来训练分类器。我们需要从其中提取特征。下图中的 Haar 特征会被使用,就像我们的卷积核,每一个特征是一 个值,这个值等于黑色矩形中的像素值之后减去白色矩形中的像素值之和。Haar特征值反映了图像的灰度变化情况。例如:脸部的一些特征能由矩形特征简单的描述,眼睛要比脸颊颜色要深,鼻梁两侧比鼻梁颜色要深,嘴巴比周围颜色要深等。Haar特征可用于于图像任意位置,大小也可以任意改变,所以原创 2021-12-22 14:34:29 · 5412 阅读 · 0 评论 -
计算机视觉概述:视觉任务+场景领域+发展历程+典型任务
一、什么是计算机视觉定义:计算机视觉(Computer vision)是⼀⻔研究如何使机器“看”的科学,更 进⼀步的说,就是指⽤摄影机和计算机代替⼈眼对⽬标进⾏识别、跟踪和测量 等,⽤计算机处理成为更适合⼈眼观察或传送给仪器检测的图像。比如下图,做到的不仅仅是检测到图像前景中有四个⼈、⼀条街道和⼏辆⻋。除了这些基本信息,⼈类还能够看出图像前景中的⼈正在⾛路,其中⼀⼈⾚脚,我们甚⾄知道他们是谁。我们可以理性地推断出图中⼈物没有被⻋撞击的危险,⽩⾊的⼤众汽⻋没有停好。⼈类还可以描述图中⼈物的穿着,不⽌是⾐原创 2021-12-22 21:13:11 · 5280 阅读 · 0 评论 -
图像分类_01图像分类简介:挑战+近邻分类器+CIFAR-10数据集概述
2.1.1 图像分类任务目的:对输入的图像赋予一个标签,这个标签在指定类别集合中。下面这个例子中,图像分类模型拍摄一张图像并将概率分配给4个标签{cat,dog,hat,mug}。如图所示,请记住,对于计算机而言,图像表示为一个大型3维数字数组。在此示例中,猫图像的宽度为248像素,高度为400像素,并具有红色,绿色,蓝色(简称RGB)三个颜色通道。因此,图像由248 x 400 x 3个数字或总共297,600个数字组成。每个数字都是一个整数,范围是0(黑色)到255(白色)。我们的任务是将这一百万原创 2021-12-23 14:19:58 · 4055 阅读 · 1 评论 -
图像分类_02神经网络(NN)简介:定义+ 感知机+历史
2.2.1 什么是神经网络人工神经网络( Artificial Neural Network, 简写为ANN)也简称为神经网络(NN)。是一种模仿生物神经网络(动物的中枢神经系统,特别是大脑)结构和功能的计算模型。经典的神经网络结构包含三个层次的神经网络。分别输入层,输出层以及隐藏层。其中每层的圆圈代表一个神经元,隐藏层和输出层的神经元有输入的数据计算后输出,输入层的神经元只是输入。 神经网络的特点 1、每个连接都有个权值 2、同一层神经元之间没有连接.原创 2021-12-23 15:06:52 · 5417 阅读 · 0 评论 -
图像分类_03分类器及损失:线性分类+ SVM损失+Softmax 分类+交叉熵损失
2.3.1 线性分类现在,我们将开发⼀种功能更强⼤的图像分类⽅法,最终将其⾃然地扩展到整个神经⽹络和卷积神经⽹络。线性分类⽅法。这种⽅法来主要由两部分,⼀个函数将输⼊数据映射到⼀个类别分数,另⼀个就是损失函数来量化预测的分数与⽬标值之间的⼀致性。回到之前的CIFAR-10例⼦,输⼊训练图像的数据集50000张图⽚, 向量维度D =32 x 32 x 3 = 3072像素,K⼤⼩为10个类别我们可以控制参数w,b的设置。我们的⽬标是设置这些参数,以便计算出的分数与整个训练集中的⽬标值标签相匹配。这原创 2021-12-23 15:55:58 · 5423 阅读 · 0 评论 -
图像分类_04神经网络最优化过程:反向传播+代码实现
反向传播+代码实现_李大狗的读研日记-CSDN博客_反向传播 源码https://blog.csdn.net/qq_39237205/article/details/121065690原创 2021-12-23 16:22:31 · 5899 阅读 · 2 评论 -
图像目标分割_1 概述
6.1.1 什么是目标分割定义:在计算机视觉领域,图像分割(Object Segmentation)指的是将数字图像细分为多个图像子区域(像素的集合)的过程。图像分割的目的:简化或改变图像的表示形式,使得图像更容易理解和分析。图像分割通常用于定位图像中的物体和边界(线,曲线等)。更精确的,图像分割是对图像中的每个像素加标签的一个过程,这一过程使得具有相同标签的像素具有某种共同视觉特性。图像分割的结果:图像上子区域的集合,或是从图像中提取的轮廓线的集合(例如边缘检测)。一个子区域中的每个像素在某种特原创 2022-01-11 10:38:13 · 6009 阅读 · 0 评论 -
图像目标分割_2 FCN(Fully Convolutional Networks for Semantic Segmentation)
6.2.1 FCN 背景介绍图像语义分割:给定一张图片,对图片上每一个像素点进行分类!但是与图像分类目的不同,语义分割模型要具有像素级的密集预测能力才可以。6.2.2 FCN介绍6.2.2.1 全卷积网络全卷积网络,模型由卷积层、池化层组成(没有全连接层),可以接受任意大小的输入,网络的示意图如下过程:输入一张图片,网络由浅到深,随着卷积层和池化层不断作用,产生的特征图分辨率越来越小,但是通道数会越来越多。最后通过逐层上采样得到一个和输入形状一样的结果。输入可为任意尺原创 2022-01-11 10:56:07 · 2335 阅读 · 0 评论 -
图像目标分割_3 SegNet + U-Net
6.3.1 SegNet背景SegNet的主要动机是场景理解的应用。难点:因此它在设计的时候考虑了要在预测期间保证内存和计算时间上的效率。分割的任务其实应用非常地广,需要理解各个像素之间的关系,比如要区分出人行道和车行道,建筑物和道路,并且还要能够检测识别到小的物体,比如路边的小狗,小猫。所以这个任务需要很高的精度,也很具有挑战性。 思想:所以为了有个好的区分度,需要对物体的边界有一个非常好的效果,特别是在特征提取的时候,需要保持这些边界的信息(忽略高分辨率的特征图(conv1,conv2的特征图原创 2022-01-11 11:20:37 · 2404 阅读 · 0 评论 -
图像目标分割_4 DeepLab-V1
6.4.1 DeepLab 背景相比于传统的视觉算法(SIFT或HOG),Deep-CNN以其end-to-end方式获得了很好的效果。这样的成功部分可以归功于Deep-CNN对图像转换的平移不变性(invariance),这根本是源于重复的池化和下采样组合层。平移不变性增强了对数据分层抽象的能力,但同时可能会阻碍低级(low-level)视觉任务,例如姿态估计、语义分割等,在这些任务中我们倾向于精确的定位而不是抽象的空间关系。Deep-CNN在图像标记任务中存在两个技术障碍: 信号下采样:在原创 2022-01-11 11:44:50 · 2264 阅读 · 0 评论 -
图像目标分割_5 DeepLab V2 & V3& V3+
6.5.1 DeepLab V26.5.1.1 改变特点atrous convolution 采用ASPP ( atrous spatial pyramid pooling) 多尺度获得更好的分割效果 合并深度卷积网络和概率图模型方法,增强对物体边界的定位。 基础层由VGG16转为ResNet和v1不同:通过多尺度输入处理或者多孔空间金字塔池化,可以更好地分割物体。 DeepLab采用最新的ResNet图像分类深度卷积神经网络构建,与原来基于VGG-16的网络相比,取得了更好的语义分割原创 2022-01-15 10:49:38 · 2155 阅读 · 0 评论 -
图像目标分割_6 Mask RCNN
6.6.0 背景目标检测和语义分割的效果在短时间内得到了很大的改善。在很大程度上,这些进步是由强大的基线系统驱动的,例如,分别用于目标检测和语义分割的Fast/Faster R-CNN和全卷积网络(FCN)框架。这些方法在概念上是直观的,提供灵活性和鲁棒性,以及快速的训练和推理。论文作者在这项工作中的目标是为目标分割开发一个相对有力的框架。Mask RCNN主要解决的是实例分割,语义分割 (semantic segmentation)指的是把一张图像的每一个像素进行分类, 比如把图像中所有的人分为.原创 2022-01-15 11:04:14 · 3402 阅读 · 0 评论