- 博客(41)
- 资源 (44)
- 收藏
- 关注
原创 在OpenCV里实现膨胀
在前面学习了腐蚀的过程,就是根据结构元素范围里在图片找最小值作为输出,如果把这个找最小值修改一下,改为找最大值,那么这个算法就叫做膨胀了。同样邻域的形状由结构元决定,既然取邻域内的最大值,那么膨胀后的输出图像的总体亮度的平均值比起原图会有所上升,图像中较亮的物体的尺寸会变大;相反,较暗物体的尺寸会减小,甚至消失。可以用下面的公式来表示:数学公式表示如下:D=I⨁SD表示输出,I表示...
2019-09-30 21:14:27 1323
原创 在OpenCV里实现腐蚀
在这里将开始学习形态学,什么是形态学呢?形态学,即数学形态学(mathematical Morphology),是图像处理中应用最为广泛的技术之一,主要用于从图像中提取对表达和描绘区域形状有意义的图像分量,使后续的识别工作能够抓住目标对象最为本质(最具区分能力-most discriminative)的形状特征,如边界和连通区域等。同时像细化、像素化和修剪毛刺等技术也常应用于图像的预处理和后处理中...
2019-09-30 18:24:21 999
原创 在OpenCV里实现二值图的逻辑运算
在前面学习了阈值分割,这样得到的图像往往是二值图,有了二值图之后就可以利用二值图之间进行逻辑运算,在OpenCV里提供了bitwise_and、bitwise_or、bitwise_xor、bitwise_not这四个按位操作函数。bitwise_and是对二进制数据进行“与”操作,即对图像(灰度图像或彩色图像均可)每个像素值进行二进制“与”操作,1&1=1,1&0=0,0&a...
2019-09-29 16:53:25 1039
原创 在OpenCV里实现自适应阈值分割
在图片处理过程中,针对铺前进行二值化等操作的时候,我们希望能够将图片相应区域内所有的信息提供保留。实验室环境下,相应的素材是模板化的,但是将实验室方法应用于现实环境中时,我们会发现光影环境对于效果的影响其实是很大的。在这种情况下进行处理,会使得结果不如人意:一块黑,一块白,且黑的区域的特征无法提取。这时候自适应阈值算法尤为重要。与全局阈值不同,它更加注重上下文关系,将原本图片分割成更小的区域进行判...
2019-09-27 08:27:30 2276
原创 在OpenCV里实现全局阈值分割5
接着下看THRESH_TRIANGLE算法,三角法求阈值最早见于Zack的论文《Automatic measurement of sister chromatid exchange frequency》主要是用于染色体的研究,该方法是使用直方图数据,基于纯几何方法来寻找最佳阈值,它的成立条件是假设直方图最大波峰在靠近最亮的一侧,然后通过三角形求得最大直线距离,根据最大直线距离对应的直方图灰度等级...
2019-09-26 16:11:53 384
原创 在OpenCV里实现全局阈值分割4
在前面五种类型里,都是设置根据阈值进行设置的,但是怎么样来决定阈值是多少,那是根据手动来设置的。由于很多情况之下,可能不能人工地设置阈值,那么就需要有算法来根据图像自动计算阈值。在OpenCV里已经有两种自动计算阈值的方法:THRESH_OTSU和THRESH_TRIANGLE。首先来看THRESH_OTSU算法,它也称最大类间差法,有时也称之为大津算法。它是按图像的灰度特性,将图像分成背景和前...
2019-09-26 15:48:25 735
原创 在OpenCV里实现全局阈值分割3
接着下来看THRESH_TRUNC类型,这个类型与前面两个类型的区别在于最大值不起作用,而是让大于阈值的像素值全部等于阈值。演示例子如下:#python 3.7.4,opencv4.1#蔡军生 https://blog.csdn.net/caimouse/article/details/51749579#import cv2import numpy as np#图像数据src ...
2019-09-25 16:22:18 394
原创 在OpenCV里实现全局阈值分割2
接着下来再看THRESH_BINARY_INV类型,它的意思就是与THRESH_BINARY相反,比如大于阈值时THRESH_BINARY设置为最大值,THRESH_BINARY_INV类型设置为0。演示的例子如下:#python 3.7.4,opencv4.1#蔡军生 https://blog.csdn.net/caimouse/article/details/51749579#im...
2019-09-25 08:33:36 495
原创 在OpenCV里实现全局阈值分割1
在前面学习了平滑的处理,接着下来将要学习图像分割。当人们观察一个图片时,会把图片里的物体进行分割出来,这样才能知道这张图片里包含有什么物体,然后根据物体的形态进行理解。因此在图像处理里,如果能把图像里的物体分割出来,再进行归类,就可以进一步地进行识别出来。图像分割(image segmentation)技术是计算机视觉领域的一个重要的研究方向,是图像语义理解的重要一环。图像分割是指将图像分成若干具...
2019-09-24 17:01:21 1247
原创 在OpenCV里实现导向滤波
前面学习了双边滤波和联合滤波,都可以保边滤波,计算方式比较类似,都是使用相似性权重模板,下面来介绍一种不依赖于权重模板的保边滤波的另外一种方法—导向滤波。导向滤波比前面两种滤波优点有计算速度快,并且细节增强,平滑效果更好。导向图滤波是一种图像滤波技术 ,通过一张引导图G(导向图),对目标图像P(输入图像)进行滤波处理,使得最后的输出图像大体上与目标图像P相似,但是纹理部分与引导图G相似。其典型应用...
2019-09-23 17:56:37 692 1
原创 在OpenCV里实现联合双边滤波
在前面学习了双边滤波,虽然实现保边平滑的效果,但是平滑效果有时候不如高斯平滑。那么有没有改进的方法呢?这里来回忆一下,前面双边滤波里,使用原图像的灰度相似度作为相似算法,是否可以从这里下手呢?其实是可以的。可以先对原图像进行高斯平滑,然后把这幅图像的灰度值作为计算相似度,替代双边滤波里的原图像相似度计算。把这种方法叫做联合双边滤波,双边滤波的公式如下:根据联合双边滤波可以把公式改为这样:...
2019-09-23 16:00:34 741
原创 在OpenCV里实现双边滤波
前面学习了高斯平滑、均值平滑,在一些图像处理里非常有效果,但是它在去除噪声同时,也把图像的边缘进行模糊。现在就得考虑有没有这样方法,既可以平滑图像,又可以保留图像边缘的信息。我们来回顾一下前面使用的高斯平滑,其实是构造一个正态分布的矩阵,以中心点像素为主,周边距离远的像素为次,这样是按距离进行加权平滑,因此距离中心点近的像素权值越大,距离远的像素权值越小。现在要增加一个领域里像素值的考虑,与中心点...
2019-09-20 11:59:12 1075
原创 在OpenCV里实现中值平滑
图像去噪是进行数字图像处理的一个基本环节,而中值滤波是基于排序统计理论的一种能有效抑制噪声的非线性信号处理技术,其基本原理是把数字图像或数字序列中一点的值用该点的一个邻域中各点值的中值代替,让周围的像素值接近真实值,从而消除孤立的噪声点。中值滤波是一种典型的非线性滤波,是基于排序统计理论的一种能够有效抑制噪声的非线性信号处理技术,基本思想是用像素点邻域灰度值的中值来代替该像素点的灰度值,让周围的像...
2019-09-19 16:57:04 683
原创 在OpenCV里实现均值平滑5
从前面来看已经可以把积分图像的功能集成到OpenCV里,那么在它里面也有相应的均值平滑的函数cv2.blur,这个函数实现的功能与前面实现快速计算平滑的方法是一样的,只不过它可以处理彩色图像,因为它可以把彩色图片进行分离成三个颜色的图像进行平滑,再合并回来。它的定义如下:src 输入图像dst 输出图像ksize 平滑窗口的大小anchor 锚点,如果宽、高均为奇数,则Poin...
2019-09-18 16:16:40 364
原创 在OpenCV里实现均值平滑4
前面为了说明原理,采用自己实现的积分图像的计算方法,其实这种方法也是OpenCV里实现的算法,那在OpenCV里有没有相同的实现函数呢?这是有的,它就是cv2.integral函数,它的定义如下:第一个参数src,可以使灰度图或RGB彩色图,单通道和三通道均可作为输入,但每个通道的精度必须是8位int或32位、64位浮点型;第二个参数sum,积分图,若输入src是灰度图,则积分图也是灰...
2019-09-18 15:54:36 352
原创 在OpenCV里实现均值平滑3
有了前面的积分图像之后,就可以采用下面的公式来快速地计算均值平滑:这个公式就是前面计算面积的公式,因此可以把均值平滑的算法写成这样:#python 3.7.4,opencv4.1#蔡军生 https://blog.csdn.net/caimouse/article/details/51749579#import cv2import numpy as np#计算积分图像In...
2019-09-16 18:17:35 846 1
原创 在OpenCV里实现均值平滑2
通过均值可以实现平滑的效果,不过这样采用卷积的方式来计算还是不够快,即使是使用了分离的卷积计算。由于均值的特殊性,可以针对这种卷积计算进行优化。我们知道计算均值就是把所有元素加到一起,然后再除以个数。由于图像很大,而卷积算子很小,那么就相当于一个窗口不断地滑动在图像上,并且计算这个窗口的和,那么有没有方法让这个计算的和快速一些。我们知道卷积计算是由乘法再求和,要快速就得把乘法替换掉,那么要怎么样才...
2019-09-16 17:11:46 1334
原创 在OpenCV里实现均值平滑1
前面学习了高斯平滑,其实就是使用卷积对图像的操作,卷积核的数据采用了二维正态分布,那么沿着这个思路,我们来把卷积核修改为不同的方式,那么这样的平滑是否也有意义,也能达到我们的目的呢。在这里就来进行一个修改,前面是使用高斯函数,在这里不使用这个了,而是使用平均值的方式。假设一个卷积核高为h,宽为w的均值卷积算子,它的所有元素值都是1/(h*w),如下所示:比如:均值平滑是指对每一个像...
2019-09-12 10:54:21 975
原创 在OpenCV里实现高斯平滑6
前面可以看到使用分离的高斯卷积核来计算平滑更快,不过前面使用的卷积函数是采用scipy里的,现在我们来采用OpenCV里函数sepFilter2D来计算,它的定义如下:dst=cv.sepFilter2D(src, ddepth, kernelX, kernelY[, dst[, anchor[, delta[, borderType]]]])其中参数定义:InputArray src...
2019-09-12 08:21:03 594
原创 在OpenCV里实现高斯平滑5
基于可分离的高斯矩阵的卷积,并且计算量还少,那么OpenCV也提供了相应的函数getGaussianKernel来计算高斯平滑,这个函数主要用来计算一维垂直方向的高斯卷积核,它的定义如下:retval=cv.getGaussianKernel(ksize, sigma[, ktype])其中参数ksize是表示一维垂直方向上的高斯核的行数,要求是正奇数;sigma是表示标准差;ktype是...
2019-09-11 16:45:11 529
原创 在OpenCV里实现高斯平滑4
上面通过代码构造了高斯算子,并且使用二维的卷积运算来平滑图像,也达到了目标,不过还有一个问题,就是当你处理比较大的图片,或者比较大的高斯矩阵时,就会发现计算的时间很长。这时候我们就要考虑有没有高效快速的算法了,再回过头来审视一下二维高斯函数:可以看到最后的等式,再考虑指数的运算法则:根据(1)指数运算公式,反向使用它,就可以变换为两个指数相乘,这样就有意义了,表明高斯算子是可以分离...
2019-09-11 11:38:42 418
原创 在OpenCV里实现高斯平滑3
在上面了解图像扩展的方式,也就是明白了扩展参数的作用,接着下来要明白为什么要叫做高斯平滑了,因为这个函数里使用了高斯分布,如果对高斯分布很陌生的话,或许听说正态分布,这个分布经常会使用到。高斯平滑,也有另外一种叫法:高斯滤波。高斯滤波是一种线性平滑滤波,适用于消除高斯噪声,广泛应用于图像处理的减噪过程。通俗的讲,高斯滤波就是对整幅图像进行加权平均的过程,每一个像素点的值,都由其本身和邻域内的其他像...
2019-09-11 08:37:09 475
原创 在OpenCV里实现高斯平滑2
在上面这个例子里使用了高斯平滑函数cv2.GaussianBlur(),就可以让点阵的图片进行细腻化,模糊化,其实也是一个滤镜的作用。现在回过头来看一下,高斯平滑是怎么样实现的,又是怎么样进行卷积运算。在进行下一步之前,先来看一下函数cv2.GaussianBlur()的定义,如下:dst=cv.GaussianBlur(src, ksize, sigmaX[, dst[, sigmaY[, ...
2019-09-10 15:51:04 524
原创 在OpenCV里实现高斯平滑1
在前面复习了卷积的运算,以及使用python里的函数进行计算卷积,理解到卷积的过程,其实在图像里就是其中一点像素值可以与它周围的像素值进行加权求和,这就意味着输出的像素值是作为平均计算,因此该点的像素值由这点和这点周围的像素来决定了。理论上怎么样推导,怎么样计算,可以先放下来,首要的问题是先来感觉一下什么是高斯平滑,又是怎么样来变换图像的,因此先看下面的例子:#python 3.7.4,op...
2019-09-10 09:27:54 672
原创 在OpenCV里实现二维离散卷积3
从结果里可以看到,当卷积使用full计算时,输出结果会比原来输入的图像变大,这样会破坏图像的大小,如果经过几遍这样的计算,图像就会变得非常大,有时候这种输出结果会导致问题出现。那么有没有输入图像与输出图像一样大小的卷积运算呢?是有的,就是same模式计算,如下图:当卷积核的中心(K)与image的边角重合时,开始做卷积运算,可见卷积核的运动范围比full模式小了一圈。注意:这里的same还...
2019-09-09 11:07:46 485
原创 在OpenCV里实现二维离散卷积2
上面了解了整个二维卷积的计算过程,那么接着下来,需要看看在代码里怎么样实现这样的计算,方法当然有很多,比如自己编写代码把整个算法实现,也可以采用python的科学计算库Scipy里的功能,还可以使用OpenCV的功能。在这里主要学习后面两种卷积的编程方法。先来学习使用scipy的方式,如果你的环境里没有安装这个库,可以使用下面的命令行来安装:C:\Users\arm>pip inst...
2019-09-09 09:34:49 806
原创 在OpenCV里实现二维离散卷积1
在前面学习的内容主要是对图像进行增强的操作,不过图像可能还有某种干扰的像素,这些像素可能是由噪声引起的,噪声可以理解为由一种或多种原因造成的灰度值的随机变化,比如电磁波通讯时受到干扰。为了解决这个问题,在大多数情况之下,通过平滑技术(或称为滤波技术)进行抑制或者消除,常用的平滑处理算法包括二维离散卷积的高斯平滑、均值平滑,基于统计方法的中值平滑等等。在进行平滑算法之前,先来温习一下二维离...
2019-09-07 22:38:07 3439
原创 在OpenCV里实现限制对比度的直方图均衡化
下面将要介绍功能强大、用途广泛、影响深远的对比度有限的自适应直方图均衡(CLAHE,Contrast Limited Adaptive Histogram Equalization)算法。尽管最初它仅仅是被当作一种图像增强算法被提出,但是现今在图像去雾、低照度图像增强,水下图像效果调节、以及数码照片改善等方面都有应用。对于一幅图像而言,它不同区域的对比度可能差别很大。可能有些地方很明亮,而有些地方...
2019-09-07 09:34:58 853
原创 在OpenCV里实现全局直方图均衡化2
上面是根据原理,使用自己编写的算法来实现全局直方图均衡化,接着下来,就是使用OpenCV里的函数cv2. equalizeHist()来计算,这个函数计算步骤如下:采用这个函数来计算相同的图片的例子:#python 3.7.4,opencv4.1#蔡军生 https://blog.csdn.net/caimouse/article/details/51749579#import...
2019-09-06 17:54:28 567
原创 在OpenCV里实现全局直方图均衡化1
前面学习过直方图的概念,也学习过它的算法实现,也看到相应的图示。从这么多直方图里,是否看得出来一些门道呢?经过经验的积累,会发现清晰的图片,都有一个特点,就是直方图比较平坦,像素分布比较平均。由于环境或摄像机的问题,导致某些图片不清晰,从直方图上来看就是要么过度集中在右边,或者左边,或者中间,对于这些图片进行改善,让它的清晰度进行提高。当然提高的方法有很多,前面就有线性和伽马变换,现在来学习另外一...
2019-09-06 16:31:06 485
原创 在OpenCV里实现伽马变换
在前面学习了图像的线性变换,接着下来介绍常用图像非线性变换—伽马变换(Gamma变换)。Gamma变换是对输入图像灰度值进行的非线性操作,使输出图像灰度值与输入图像灰度值呈指数关系:这个指数即为Gamma。Gamma变换就是用来图像增强,其提升了暗部细节,简单来说就是通过非线性变换,让图像从暴光强度的线性响应变得更接近人眼感受的响应,即将漂白(相机曝光)或过暗(曝光不足)的图片,进行矫...
2019-09-05 16:39:35 2547
原创 在OpenCV里实现正规化变换2
上面学习了L1范数,还有L2范数,那么什么是范数的分类呢?其实要从数学上一条公式来分析出来,这个公式如下:Lp=|x|p=(i|xi|p)1p在这条公式里,根据p值来取不同的值来分类,P=1-范数:║x║1=│x1│+│x2│+…+│xn│ (曼哈顿距离)P=2-范数:║x║2=(│x1│2+│x2│2+…+│xn│2)1/2...
2019-09-05 11:35:18 549
原创 在OpenCV里实现正规化变换1
前面学习了直方图正规化变换,采用的是等比例缩放方式,这种方式理解起来比较简单和形象。但是在图像正规化里,计算的方式有很多种,源于人们对距离的认识不同。说到距离,那么我们就要从中学的绝对值开始了,比如温度计就是常用的一种工具,早上温度为0度,中午为10度,那么温度相差为10度,这个就是温度的差,也是一种距离。如果晚上温度为-10度,那么晚上与早上的温差也是10度,要计算这个10度显然就是使用了绝对值...
2019-09-04 17:45:59 411
原创 在OpenCV里实现直方图正规化变换
前面的线性变换的参数需要根据不同的图像进行合理的选择,这样就比较麻烦,我们希望有一种基于当前图像情况自动地选择参数的方法,一般情况下会选择直方图正规化。下面可以使用python来按上面公式来检验这个方法是否可行,例子代码如下:#python 3.7.4,opencv4.1#蔡军生 https://blog.csdn.net/caimouse/article/details/5174...
2019-09-04 09:09:53 566
原创 在OpenCV里实现图像线性变换
在前面学习了什么叫做灰度直方图,知道图像对比度是通过灰度级范围来度量的,而灰度级范围可通过观察灰度直方图得到,范围越大说明对比度越高。低对比度的图像在视觉上给人的感觉是看起来不够清晰,因此需要通过算法来调整图像的灰度值,从而使用图像更加清晰起来,最容易理解的算法就是线性变换的算法。对于图像矩阵的线性变换,无非就是乘一个常数,或者每个值加上常数。如果大于255的值转换为255,这样就可以限制图像的像...
2019-09-03 16:02:48 1257
原创 在OpenCV里实现灰度直方图3
最后使用OpenCV里的函数来实现灰度直方图的统计,这个函数定义如下:cv2.calcHist(images, channels, mask, histSize, ranges[, hist[, accumulate ]]) #返回hist第一个参数必须用方括号括起来。第二个参数是用于计算直方图的通道,这里使用灰度图计算直方图,所以就直接使用第一个通道;第三个参数是Mask,这里没...
2019-09-03 10:00:18 569
原创 在OpenCV里实现灰度直方图2
上面这个程序主要用来说明灰度直方图的计算原理,使用起来还是有点不方便,下面使用matplotlib里的功能来实现相应的统计,这样就更加节省代码,使用起来更加方便。下面来看一下hist函数的定义:函数:matplotlib.pyplot.hist(x,bins=None,range=None, density=None, bottom=None, histtype='bar', align='m...
2019-09-03 09:09:42 414
原创 在OpenCV里实现灰度直方图1
有时候,我们看到一张照片它不清楚,那么这个不清楚用什么来表示,或者说评价呢?其实我们在使用数码相机时有很多参数,其中有一项有关曝光的图表最容易被人忽略,也最难理解,它就是相机内自带的曝光助手—直方图。现在就来理解直方图的世界,了解直方图的奥秘。灰度直方图是关于灰度级分布的函数,是对图像中灰度级分布的统计。灰度直方图是将数字图像中的所有像素,按照灰度值的大小,统计其出现的频率。灰度直方图是灰度级...
2019-09-03 09:05:40 1291
原创 在OpenCV里实现极坐标变换5
前面使用OpenCV旧的函数做了极坐标变换,随着OpenCV的发展,又增加了一个新的极坐标变换函数,以便替换前面两个函数。这次就来学习这个新的极坐标变换函数,这个函数定义如下:这个函数可以映射到极坐标变换或者半极坐标变换。其中参数定义如下:src是输入图像数组;dst是输出图像数组;dsize是输出图像的大小,用元组(w,h)表示;center是原图的变换中心点,用元组(x...
2019-09-02 09:26:58 748
原创 在OpenCV里实现极坐标变换4
前面使用自己定义插值算法来实现极坐标变换,现在来使用OpenCV里面函数来实现极坐标变换,主要有两个函数:线性极坐标函数linearPolar和对数极坐标函数logPolar。这两个函数分别定义如下:dst = cv.linearPolar(src, center, maxRadius, flags[, dst])其中参数src表示输入图像数组;参数center表示极坐标的变换中心;...
2019-09-02 08:35:55 1037
python抓取天气并分析 实例源码
2017-08-28
书《深度学习》
2017-03-13
国产8051模拟器
2016-09-10
tinyxml2配套源码
2016-06-27
selenium的浏览器驱动
2016-06-14
开源鸿蒙4.0不能进入桌面的补丁
2024-03-17
开源鸿蒙 4.0 RK3566开发板配置
2024-03-17
svm_hog_data.rar
2020-03-02
实现numpy的C++库扩展
2019-11-24
python web py入门配套源代码
2018-02-23
webpy演示例子1
2018-02-21
胶囊模型的代码
2018-02-02
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人