
OpenCV
文章平均质量分 97
关于 OpenCV 的基础知识及原理详解,
参考书籍《OpenCV算法精讲——基于Python与C++》张平,《数字图像处理(第三版)》冈萨雷斯
CharlesWu123
分享平时积累与学习的内容,研究方向:OCR,图像,深度学习。
展开
-
OpenCV —— 特征点检测之 SIFT 特征检测器
上一篇文章介绍的特征检测器已经可以较好地解决方向不变性问题,即图像旋转后仍能检测到相同的特征点。这篇文章介绍两个特征检测器(SIFT 和 SURF)可以解决尺度不变性问题,即在任何尺度下拍摄的物体都能检测到一致的关键点,而且每个被检测的特征点都对应一个尺度因子。理想情况下,对比两幅图像中不同尺度的同一个物体点,计算得到的两个尺度因子之间的比率应该等于图像尺度的比率。SIFT原理详解Scale-Invariant Feature Transform,尺度不变特征转换尺度空间的极值检测:首先是构造 D原创 2021-04-11 13:26:17 · 6701 阅读 · 4 评论 -
OpenCV —— 角点检测之 Harris 角点检测、Shi-Tomasi 角点检测、FAST 角点检测
Harris 角点检测实现原理OpenCV 函数优化GFTT在图像处理和计算机视觉领域,兴趣点(inter points),也被称作关键点(key points)、特征点(feature points)。它被大量用于解决物体识别、图像识别、图像匹配、视觉跟踪、三维重建等一系列的问题。我们不再观察整幅图,而是选择某些特殊的点,然后对它们进行局部有的放矢地分析。如果能检测到足够多的这种点,同时它们的区分度很高,并且可以精确定位稳定的特征,那么这个方法就具有实用价值。图像特征类型可以被分为如下三种:边缘原创 2021-03-30 20:26:41 · 7737 阅读 · 1 评论 -
OpenCV —— 图像分割之基于距离变换的分水岭分割
图像分割处理流程1. 原图像灰度化,二值化,开运算消除噪点2. 距离变换,归一化 `distanceTransform` `normalize`3. 再次二值化,得到确定的前景,即种子4. 根据种子生成 Marker,可以通过以下两种方式生成: * 查找连通分量 `connectedComponents` * 查找轮廓,绘制轮廓 `findContours`, `drawContours`5. 分水岭变换 `watershed`6. 输出图像原创 2021-03-14 22:47:36 · 3841 阅读 · 0 评论 -
OpenCV —— 模板匹配
模板匹配就是在整个图像区域发现与给定图像最相似的小块区域,所以模板匹配首先需要一个模板图像,另外需要一个待检测图像:* 在待检测图像上,从左到右,从上到下,计算模板图像与重叠子图像的匹配度(相似度),匹配度(相似度)越大,两者相同的可能性越大。* 对于每一个位置将计算的相似结果保存在矩阵 R 中。如果输入图像的大小为 WxH 且模板图像的大小为 wxh,则输出矩阵 R 的大小为 (W-w+1)x(H-h+1) 。* 获得 R 后,从 R 中找出匹配度最高的位置,那么该位置对应的区域就是最匹配的,区原创 2021-03-09 19:45:11 · 1493 阅读 · 0 评论 -
OpenCV —— 频率域滤波(傅里叶变换,低通和高通滤波,带通和带阻滤波,同态滤波)
频率域滤波基本概念傅里叶变换二维离散的傅里叶变换快速傅里叶变换傅里叶幅度谱与相位谱谱残差显著性检测卷积与傅里叶变换的频率域滤波低通滤波和高通滤波带通和带阻滤波同态滤波基本概念频率域滤波 —— 百度百科频率域滤波是对图像进行傅里叶变换,将图像由图像空间转换到频域空间,然后在频率域中对图像的频谱作分析处理,以改变图像的频率特征。滤波: 狭义地说,滤波是指改变信号中各个频率分量的相对大小、或者分离出来加以抑制、甚至全部滤除某些频率分量的过程。广义地说,滤波是把某种信号处理成为另一种信号的过程。空间域滤波原创 2021-03-01 20:11:09 · 13543 阅读 · 5 评论 -
OpenCV —— 几何形状的检测和拟合(凸包、霍夫直线检测、霍夫圆检测、轮廓)
几何形状的检测和拟合点集的最小外包最小外包矩形最小外包圆最小外包三角形最小凸包霍夫直线检测霍夫圆检测标准霍夫圆检测基于梯度的霍夫圆检测轮廓查找、绘制轮廓外包、拟合轮廓轮廓的周长和面积点和轮廓的关系轮廓的凸包缺陷根据阈值分割和边缘检测可以基本确定物体的边缘或者前景,接下来需要拟合这些边缘和前景,如确定物体边缘是否满足某种几何形状,如直线、圆、椭圆等,或者拟合出包含前景或者边缘像素点的最小外包矩形、圆、凸包等几何形状,为计算它们的面积或者为模板匹配等操作打下坚实的基础。点集的最小外包点集是指坐标点的集。已原创 2021-02-25 23:31:16 · 15547 阅读 · 1 评论 -
OpenCV —— 边缘检测(Laplacian、LoG、DoG、Marr-Hildreth 边缘检测)
边缘检测Laplacian 算子高斯拉普拉斯(LoG)边缘检测高斯差分(DoG)边缘检测Marr-Hildreth 边缘检测Laplacian 算子二维函数 f(x,y)f(x,y)f(x,y) 的 Laplacian(拉普拉斯)变换,由以下计算公式定义:∇2f(x,y)=∂2f(x,y)∂2x+∂2f(x,y)∂2y≈∂(f(x+1,y)−f(x,y))∂x+∂(f(x+1,y)−f(x,y))∂y≈f(x+1,y)−f(x,y)−(f(x,y)−f(x−1,y)) +f(x,y+1)原创 2021-01-31 19:04:03 · 4592 阅读 · 1 评论 -
OpenCV —— 边缘检测(Roberts、Prewitt、Sobel、Scharr、Kirsch、Robinson、Canny边缘检测)
边缘检测Roberts 算子Prewitt 边缘检测Sobel 边缘检测Scharr算子Krisch 算子和Robinson 算子Canny 边缘检测图像的边缘指的是灰度值发生急剧变化的位置。在图像形成过程中,由于亮度、纹理、颜色、阴影等物理因素的不同而导致图像灰度值发生突变,从而形成边缘。边缘是通过检查每个像素的邻域并对其灰度变化进行量化的,这种灰度变化的量化相当于微积分里连续函数中方向导数或者离散数列的差分。边缘检测大多数是通过基于方向导数掩码(梯度方向导数)求卷积的方法。计算灰度变化的卷积算子包含原创 2021-01-18 22:52:55 · 4746 阅读 · 1 评论 -
OpenCV —— 形态学处理(腐蚀、膨胀、开运算、闭运算、顶帽、底帽、形态学梯度)
形态学处理腐蚀膨胀开运算和闭运算顶帽变换、底帽变换和形态学梯度常用的形态学处理方法包括:腐蚀、膨胀、开运算、闭运算、顶帽运算、底帽运算,其中腐蚀和膨胀是最基础的方法,其他方法是两者相互结合而产生的。腐蚀结构元: 与平滑操作类似,在平滑操作中使用的是矩形邻域,而在形态学处理中邻域可以是矩形结构,也可以是椭圆形、十字交叉形结构。同样也需要指定一个锚点。在腐蚀操作中,是取结构元中的最小值作为锚点的值。可以对灰度图或二值图做腐蚀操作。以下图为例(均取中心点为锚点):上方三个图中的邻域的最小值分别为 11原创 2021-01-16 15:38:09 · 5227 阅读 · 1 评论 -
OpenCV —— 阈值分割(直方图技术法,熵算法,Otsu,自适应阈值算法)
阈值分割1. 全局阈值分割直方图技术法熵算法Otsu算法2. 局部阈值分割自适应阈值阈值的分割的核心就是如何选取阈值,选取正确的阈值时分割成功的关键。可以使用手动设置阈值,也可以采用直方图技术法、Otsu算法、熵算法自动选取全局阈值,也可以采用自适应阈值算法自动选取局部阈值。1. 全局阈值分割设定一个阈值,将图像中小于阈值的设为 255(白色),将图像中大于阈值的设为0(黑色);或者反过来,小于阈值的设为0,大于阈值的设为255。OpenCV 函数:threshold(InputArray src原创 2021-01-09 17:39:27 · 36332 阅读 · 9 评论 -
OpenCV--Python 绘制矩形,绘制文本,获取文本大小【rectangle(),getTextSize(),putText()】
介绍三个函数:rectangle(),getTextSize(),putText()1. 函数介绍cv2.rectangle(img, pt1, pt2, color, thickness=None, lineType=None, shift=None)参数解释img要绘制的图像pt1矩形的左上角坐标 (xmin,ymin)(x_{min}, y_{min})(xmin,ymin)pt2矩形的右下角坐标 (xmax,ymax)(x_{max},y_{max}原创 2020-07-02 21:08:17 · 2962 阅读 · 0 评论 -
OpenCV--Python 图像平滑之中值平滑、双边滤波、联合双边滤波、导向滤波
中值平滑中值滤波适用于椒盐噪声,具有保边作用。调用函数:dst = cv.medianBlur(src, ksize[, dst])原创 2019-12-10 23:47:02 · 5920 阅读 · 2 评论 -
OpenCV--Python 图像平滑之高斯平滑、均值平滑
1.高斯平滑(1)高斯卷积核的构建假设构造宽(列数)为、高(行数)为的高斯卷积算子,其中和均为奇数,锚点的位置在,步骤如下:第一步:计算高斯矩阵。 其中 r,c代表位置索引,其中,,且r,c均为整数。第二步:计算高斯矩阵的和。 第三步:高斯矩阵...原创 2018-09-22 23:37:03 · 19968 阅读 · 1 评论 -
OpenCV--Python 图像平滑之二维离散卷积
每一幅图像都包含某种程度的噪声,噪声可以理解为由一种或者多种原因造成的灰度值的随机变化,如由光子通量的随机性造成的噪声等,在大多数情况下,通过平滑技术(也常称为滤波技术)进行移植或者去除,其中具备保持边缘作用的平滑技术得到了更多的关注。常用的平滑处理算法包括基于二维离散卷积的高斯平滑、均值平滑,基于统计学方法的中值平滑,具备保持边缘作用的平滑算法的双边滤波。 在介绍基于二维离散卷...原创 2018-09-21 20:01:49 · 12289 阅读 · 1 评论 -
OpenCV--Python 图像增强(线性变换,直方图正规化,伽马变换,全局直方图均衡化,限制对比度的自适应直方图均衡化)
图像增强主要解决由于图像的灰度级范围较小造成的对比度较低的问题,目的就是将输出图像的灰度级放大到指定的程度,使得图像中的细节看起来增加清晰。对比度增强有几种常用的方法,如线性变换、分段线性变换、伽马变换、直方图正规化、直方图均衡化、局部自适应直方图均衡化等。1.灰度直方图在讲解图像增强的方法之前先来认识一下灰度直方图,灰度直方图是图像灰度级的函数,用来描述每个灰度级在图像矩阵中的像素个数或...原创 2018-09-16 14:06:53 · 93804 阅读 · 35 评论 -
OpenCV--Python 图像的几何变换(仿射变换【平移、放大、缩小、旋转、插值】、投影变换、极坐标变换)
目录1.图像的仿射变换1)平移2)放大和缩小3)旋转4)计算仿射变换矩阵5)插值算法6)Python实现2.图像的投影变换3.极坐标转换总结首先要了解OpenCV的坐标原点(0,0)是在坐标的左上角,实现集合变换需要两个独立的算法: 1.实现空间变换,描述每个像素如何从初始位置移动到终止位置 2.差值算法,完成输出图像的每个像素的灰度值...原创 2018-09-14 23:57:39 · 7023 阅读 · 0 评论 -
OpenCV--Python 图像的基本操作
数字图像处理的本质就是操作矩阵,在Python中图像对应的Numpy的ndarray。所以做图像处理会使用numpy会很方便的。1.图像的读、写、显示cv2.imread("图像路径名",读取方式)读取方式有: IMREAD_ANYCOLOR = 4 IMREAD_ANYDEPTH = 2 IMREAD_COLOR = 1 IMREAD_GRAYSCALE...原创 2018-09-11 22:50:03 · 2148 阅读 · 0 评论