
Opencv_Python学习
xiyou_1996
我全都要!
展开
-
OPENCV_PYTHON官方文档学习_39.使用特征匹配和单应性查找对象
目标• 联合使用特征提取和 calib3d 模块中的 findHomography 在复杂图像中查找已知对象。基础还记得上一节我们做了什么吗?我们使用一个查询图像,在其中找到一些特征点(关键点),我们又在另一幅图像中也找到了一些特征点,最后对这两幅图像之间的特征点进行匹配。简单来说就是:我们在一张杂乱的图像中找到了一个对象(的某些部分)的位置。这些信息足以帮助我们在目标图像中准确的找到(查...原创 2020-03-23 09:21:58 · 199 阅读 · 0 评论 -
OPENCV_PYTHON官方文档学习_38. 特征匹配
目标• 我们将要学习在图像间进行特征匹配• 使用 OpenCV 中的蛮力(Brute-Force)匹配和 FLANN 匹配Brute-Force 匹配的基础蛮力匹配器是很简单的。首先在第一幅图像中选取一个关键点然后依次与第二幅图像的每个关键点进行(描述符)距离测试,最后返回距离最近的关键点。对于 BF 匹配器,我们首先要使用 cv2.BFMatcher() 创建一个 BFMatcher ...原创 2020-03-23 09:17:08 · 254 阅读 · 0 评论 -
OPENCV_PYTHON官方文档学习_37.ORB (Oriented FAST and Rotated BRIEF)
目标• 我们要学习 ORB 算法的基础原理对于一个 OpenCV 的狂热爱好者来说 ORB 最重要的一点就是:它来自“OpenCV_Labs’’。这个算法是在 2011 年提出的。在计算开支,匹配效率以及更主要的是专利问题方面 ORB 算法是是 SIFT 和 SURF 算法的一个很好的替代品。SIFT 和 SURF 算法是有专利保护的,如果你要使用它们,就可能要花钱。但是 ORB 不需要!!...原创 2020-03-23 08:31:03 · 220 阅读 · 0 评论 -
OPENCV_PYTHON官方文档学习_36.BRIEF(Binary Robust Independent Elementary Features)
目标本节• 我们学习 BRIEF 算法的基础原理我们知道 SIFT 算法使用的是 128 维的描述符。由于它是使用的浮点数,所以要使用 512 个字节。同样 SURF 算法最少使用 256 个字节(64 为维描述符)。创建一个包含上千个特征的向量需要消耗大量的内存,在嵌入式等资源有限的设备上这样是合适的。匹配时还会消耗更多的内存和时间。但是在实际的匹配过程中如此多的维度是没有必要的。我们...原创 2020-03-22 17:20:31 · 178 阅读 · 0 评论 -
OPENCV_PYTHON官方文档学习_35.角点检测的 FAST 算法
目标• 理解 FAST 算法的基础• 使用 OpenCV 中的 FAST 算法相关函数进行角点检测原理我们前面学习了几个特征检测器,它们大多数效果都很好。但是从实时处理的角度来看,这些算法都不够快。一个最好例子就是 SLAM(同步定位与地图构建),移动机器人,它们的计算资源非常有限。为了解决这个问题,Edward_Rosten 和 Tom_Drummond 在 2006 年提出里 FAS...原创 2020-03-22 14:51:52 · 224 阅读 · 0 评论 -
OPENCV_PYTHON官方文档学习_34.介绍 SURF(Speeded-Up Robust Features)
目标本节我们将要学习:• SUFR 的基础是什么?• OpenCV 中的 SURF原理在上一节中我们学习了使用 SIFT 算法进行关键点检测和描述。但是这种算法的执行速度比较慢,人们需要速度更快的算法。在 2006 年Bay,H.,Tuytelaars,T. 和 Van Gool,L 共同提出了 SURF(加速稳健特征)算法。跟它的名字一样,这是个算法是加速版的 SIFT。在 SIFT...原创 2020-03-22 13:03:33 · 245 阅读 · 0 评论 -
OPENCV_PYTHON官方文档学习_33.介绍 SIFT(Scale-Invariant Feature Transform)
目标• 学习 SIFT 算法的概念• 学习在图像中查找 SIFT 关键点和描述符原理在前面两节我们学习了一些角点检测技术,比如 Harris 等。它们具有旋转不变特性,即使图片发生了旋转,我们也能找到同样的角点。很明显即使图像发生旋转之后角点还是角点。那如果我们对图像进行缩放呢?角点可能就不再是角点了。以下图为例,在一副小图中使用一个小的窗口可以检测到一个角点,但是如果图像被放大,再使用同...原创 2020-03-22 12:23:31 · 310 阅读 · 0 评论 -
OPENCV_PYTHON官方文档学习_32.Shi-Tomasi 角点检测 & 适合于跟踪的图像特征
目标本节我们将要学习:• 另外一个角点检测技术:Shi-Tomasi 焦点检测• 函数:cv2.goodFeatureToTrack()原理上一节我们学习了 Harris 角点检测,后来 1994 年,J.Shi 和 C.Tomasi在他们的文章《Good_Features_to_Track》中对这个算法做了一个小小的修改,并得到了更好的结果。我们知道 Harris 角点检测的打分公式为...原创 2020-03-22 11:09:52 · 151 阅读 · 0 评论 -
OPENCV_PYTHON官方文档学习_31.Harris 角点检测
目标• 理解 Harris 角点检测的概念• 学习函数:cv2.cornerHarris(),cv2.cornerSubPix()原理在上一节我们已经知道了角点的一个特性:向任何方向移动变化都很大。Chris_Harris 和 Mike_Stephens早在1988 年的文章《A CombinedCorner and Edge Detector》中就已经提出了焦点检测的方法,被称为Harr...原创 2020-03-22 11:04:46 · 149 阅读 · 0 评论 -
OPENCV_PYTHON官方文档学习_30.理解图像特征
目标本节我会试着帮你理解什么是图像特征,为什么图像特征很重要,为什么角点很重要等。解释我相信你们大多数人都玩过拼图游戏吧。首先你们拿到一张图片的一堆碎片,要做的就是把这些碎片以正确的方式排列起来从而重建这幅图像。问题是,你怎样做到的呢?如果把你做游戏的原理写成计算机程序,那计算机就也会玩拼图游戏了。如果计算机可以玩拼图,我们就可以给计算机一大堆自然图片,然后就可以让计算机把它拼成一张大图了...原创 2020-03-22 10:10:47 · 123 阅读 · 0 评论 -
OPENCV_PYTHON官方文档学习_16.轮廓特征
目标• 查找轮廓的不同特征,例如面积,周长,重心,边界框等。• 你会学到很多轮廓相关函数矩图像的矩可以帮助我们计算图像的质心,面积等。详细信息请查看维基百科Image Moments。函数 cv2.moments() 会将计算得到的矩以一个字典的形式返回。如下:import cv2import numpy as npimg = cv2.imread('star.jpg',0)re...原创 2020-03-21 21:09:39 · 238 阅读 · 0 评论 -
OPENCV_PYTHON官方文档学习_17.轮廓的性质
本小节我们将要学习提取一些经常使用的对象特征。你可以在 Matlabregionprops documentation更多的图像特征。长宽比边界矩形的宽高比x,y,w,h = cv2.boundingRect(cnt)aspect_ratio = float(w)/hExtent轮廓面积与边界矩形面积的比。area = cv2.contourArea(cnt)x,y,w,h ...原创 2020-03-21 20:54:38 · 172 阅读 · 0 评论 -
OPENCV_PYTHON官方文档学习_18.轮廓:更多函数
目标• 凸缺陷,以及如何找凸缺陷• 找某一点到一个多边形的最短距离• 不同形状的匹配凸缺陷前面我们已经学习了轮廓的凸包,对象上的任何凹陷都被成为凸缺陷。OpenCV 中有一个函数 cv.convexityDefect() 可以帮助我们找到凸缺陷。函数调用如下:hull = cv2.convexHull(cnt,returnPoints = False)defects = cv2.co...原创 2020-03-21 15:35:04 · 114 阅读 · 0 评论 -
OPENCV_PYTHON官方文档学习_19.轮廓的层次结构
目标现在我们要学习轮廓的层次结构了,比如轮廓之间的父子关系。原理在前面的内容中我们使用函数 cv2.findContours来查找轮廓,我们需要传入一个参数:轮廓提取模式(Contour_Retrieval_Mode)。我们总是把它设置为 cv2.RETR_LIST 或者是 cv2.RETR_TREE,效果还可以。但是它们到底代表什么呢?同时,我们得到的结果包含 3 个数组,第一个图像,第...原创 2020-03-21 15:28:47 · 191 阅读 · 0 评论 -
OPENCV_PYTHON官方文档学习_24.图像变换
傅里叶变换目标本小节我们将要学习:• 使用 OpenCV 对图像进行傅里叶变换• 使用 Numpy 中 FFT(快速傅里叶变换)函数• 傅里叶变换的一些用处• 我们将要学习的函数有:cv2.dft(),cv2.idft() 等原理...原创 2020-03-21 14:13:52 · 140 阅读 · 0 评论 -
OPENCV_PYTHON官方文档学习_29.使用 GrabCut 算法进行交互式前景提取
目标在本节中我们将要学习:• GrabCut 算法原理,使用 GrabCut 算法提取图像的前景• 创建一个交互式程序完成前景提取原理GrabCut 算法是由微软剑桥研究院的 Carsten_Rother,Vladimir_Kolmogorov和 Andrew_Blake 在文章《GrabCut”: interactive foreground extraction using iter...原创 2020-03-21 14:14:19 · 189 阅读 · 0 评论 -
OPENCV_PYTHON官方文档学习_28.分水岭算法图像分割
目标本节我们将要学习• 使用分水岭算法基于掩模的图像分割• 函数:cv2.watershed()原理任何一副灰度图像都可以被看成拓扑平面,灰度值高的区域可以被看成是山峰,灰度值低的区域可以被看成是山谷。我们向每一个山谷中灌不同颜色的水。随着水的位的升高,不同山谷的水就会相遇汇合,为了防止不同山谷的水汇合,我们需要在水汇合的地方构建起堤坝。不停的灌水,不停的构建堤坝知道所有的山峰都被水淹没...原创 2020-03-21 14:14:07 · 193 阅读 · 0 评论 -
OPENCV_PYTHON官方文档学习_27.Hough圆环变换
目标• 学习使用霍夫变换在图像中找圆形(环)。• 学习函数:cv2.HoughCircles()。原理圆形的数学表达式为,其中(xcenter,ycenter)为圆心的坐标,r 为圆的直径。从这个等式中我们可以看出:一个圆环需要 3个参数来确定。所以进行圆环霍夫变换的累加器必须是 3 维的,这样的话效率就会很低。所以 OpenCV 用来一个比较巧妙的办法,霍夫梯度法,它可以使用边界的梯度信...原创 2020-03-19 11:13:26 · 258 阅读 · 0 评论 -
OPENCV_PYTHON官方文档学习_26.Hough直线检测
目标• 理解霍夫变换的概念• 学习如何在一张图片中检测直线• 学习函数:cv2.HoughLines(),cv2.HoughLinesP()原理霍夫变换在检测各种形状的的技术中非常流行,如果你要检测的形状可以用数学表达式写出,你就可以是使用霍夫变换检测它。及时要检测的形状存在一点破坏或者扭曲也可以使用。我们下面就看看如何使用霍夫变换检测直线。一条直线可以用数学表达式 y = mx + ...原创 2020-03-19 10:58:34 · 288 阅读 · 1 评论 -
OPENCV_PYTHON官方文档学习_25.模板匹配
目标在本节我们要学习:使用模板匹配在一幅图像中查找目标函数:cv2.matchTemplate(),cv2.minMaxLoc()原理模板匹配是用来在一副大图中搜寻查找模版图像位置的方法。OpenCV 为我们提供了函数:cv2.matchTemplate()。和 2D 卷积一样,它也是用模板图像在输入图像(大图)上滑动,并在每一个位置对模板图像和与其对应的输入图像的子区域进行比较。O...原创 2020-03-18 14:35:01 · 207 阅读 · 0 评论 -
OPENCV_PYTHON官方文档学习_23.直方图反向投影
目标本节我们将要学习直方图反向投影原理直方图反向投影是由 Michael J. Swain 和 Dana H. Ballard 在他们的文章“Indexing via color histograms”中提出。那它到底是什么呢?它可以用来做图像分割,或者在图像中找寻我们感兴趣的部分。简单来说,它会输出与输入图像(待搜索)同样大小的图像,其中的每一个像素值代表了输入图像上对应点属于目标对象的...原创 2020-03-18 11:02:13 · 135 阅读 · 0 评论 -
OPENCV_PYTHON官方文档学习_22.2D直方图
目标本节我们会学习如何绘制 2D 直方图,我们会在下一节中使用到它。介绍在前面的部分我们介绍了如何绘制一维直方图,之所以称为一维,是因为我们只考虑了图像的一个特征:灰度值。但是在 2D 直方图中我们就要考虑两个图像特征。对于彩色图像的直方图通常情况下我们需要考虑每个的颜色(Hue)和饱和度(Saturation)。根据这两个特征绘制 2D 直方图。OpenCV 中的 2D 直方图使用函数...原创 2020-03-18 10:33:08 · 226 阅读 · 1 评论 -
OPENCV_PYTHON官方文档学习_21.直方图均衡化
目标• 本小节我们要学习直方图均衡化的概念,以及如何使用它来改善图片的对比。原理想象一下如果一副图像中的大多是像素点的像素值都集中在一个像素值范围之内会怎样呢?例如,如果一幅图片整体很亮,那所有的像素值应该都会很高。但是一副高质量的图像的像素值分布应该很广泛。所以你应该把它的直方图做一个横向拉伸(如下图),这就是直方图均衡化要做的事情。通常情况下这种操作会改善图像的对比度。推荐你去读读维...原创 2020-03-17 11:24:39 · 184 阅读 · 1 评论 -
OPENCV_PYTHON官方文档学习_20.直方图
直方图的计算,绘制与分析目标• 使用 OpenCV 或 Numpy 函数计算直方图• 使用 Opencv 或者 Matplotlib 函数绘制直方图• 将要学习的函数有:cv2.calcHist(),np.histogram()原理通过直方图你可以对整幅图像的灰度分布有一个整体的了解。直方图的 x 轴是灰度值(0 到 255),y 轴是图片中具有同一个灰度值的点的数目。直方图其实就是...原创 2020-03-17 10:52:14 · 146 阅读 · 0 评论 -
OPENCV_PYTHON官方文档学习_15.OpenCV 中的轮廓
初识轮廓目标• 理解什么是轮廓• 学习找轮廓,绘制轮廓等• 函数:cv2.findContours(),cv2.drawContours()什么是轮廓轮廓可以简单认为成将连续的点(连着边界)连在一起的曲线,具有相同的颜色或者灰度。轮廓在形状分析和物体的检测和识别中很有用。• 为了更加准确,要使用二值化图像。在寻找轮廓之前,要进行阈值化处理或者 Canny 边界检测。• 查找轮廓的函...原创 2020-03-15 11:40:16 · 153 阅读 · 0 评论 -
OPENCV_PYTHON官方文档学习_14.图像金字塔
目标• 学习图像金字塔• 使用图像创建一个新水果:“橘子苹果”• 将要学习的函数有:cv2.pyrUp(),cv2.pyrDown()。原理一般情况下,我们要处理是一副具有固定分辨率的图像。但是有些情况下,我们需要对同一图像的不同分辨率的子图像进行处理。比如,我们要在一幅图像中查找某个目标,比如脸,我们不知道目标在图像中的尺寸大小。这种情况下,我们需要创建创建一组图像,这些图像是具有不同...原创 2020-03-15 11:07:51 · 112 阅读 · 0 评论 -
OPENCV_PYTHON官方文档学习_13.Canny 边缘检测
目标• 了解 Canny 边缘检测的概念• 学习函数 cv2.Canny()原理Canny 边缘检测是一种非常流行的边缘检测算法,是 John F.Canny 在1986 年提出的。它是一个有很多步构成的算法,我们接下来会逐步介绍。噪声去除由于边缘检测很容易受到噪声影响,所以第一步是使用 5x5 的高斯滤波器去除噪声,这个前面我们已经学过了。计算图像梯度对平滑后的图像使用 Sobe...原创 2020-03-14 15:49:49 · 178 阅读 · 0 评论 -
OPENCV_PYTHON官方文档学习_12.图像梯度
目标• 图像梯度,图像边界等• 使用到的函数有:cv2.Sobel(),cv2.Schar(),cv2.Laplacian() 等原理梯度简单来说就是求导。OpenCV 提供了三种不同的梯度滤波器,或者说高通滤波器:Sobel,Scharr 和 Laplacian。Sobel,Scharr 其实就是求一阶或二阶导数。Scharr 是对 Sobel(使用小的卷积核求解求解梯度角度时)的优...原创 2020-03-14 15:31:17 · 99 阅读 · 0 评论 -
OPENCV_PYTHON官方文档学习_9.图像阈值
目标• 本节你将学到简单阈值,自适应阈值,Otsu’s 二值化等• 将要学习的函数有 cv2.threshold,cv2.adaptiveThreshold 等。简单阈值当像素值高于阈值时,我们给这个像素赋予一个新值(可能是白色),否则我们给它赋予另外一种颜色(也许是黑色)。这个函数就是cv2.threshhold()。这个函数的第一个参数就是原图像,原图像应该是灰度图。第二个参数就是用来...原创 2020-03-14 14:52:46 · 117 阅读 · 0 评论 -
OPENCV_PYTHON官方文档学习_8.几何变换
目标• 学习对图像进行各种几个变换,例如移动,旋转,仿射变换等。• 将要学到的函数有:cv2.getPerspectiveTransform。变换OpenCV 提供了两个变换函数,cv2.warpAffine 和cv2.warpPerspective,使用这两个函数你可以实现所有类型的变换。cv2.warpAffine 接收的参数是2 × 3 的变换矩阵,而 cv2.warpPerspec...原创 2020-03-14 14:28:25 · 187 阅读 · 0 评论 -
OPENCV_PYTHON官方文档学习_11.形态学转换
函数有:cv2.erode(),cv2.dilate(),cv2.morphologyEx()等原理形态学操作是根据图像形状进行的简单操作。一般情况下对二值化图像进行的操作。需要输入两个参数,一个是原始图像,第二个被称为结构化元素或核,它是用来决定操作的性质的。两个基本的形态学操作是腐蚀和膨胀。他们的变体构成了开运算,闭运算,梯度等。下面逐一介绍。原始图像:腐蚀这个操作会把前景物体的...原创 2020-03-14 11:04:38 · 132 阅读 · 0 评论 -
OPENCV_PYTHON官方文档学习_10.图像平滑
学习使用不同的低通滤波器对图像进行模糊2D 卷积与以为信号一样,我们也可以对 2D 图像实施低通(LPF),高通滤波(HPF)等。LPF 帮助我们去除噪音,模糊图像。HPF帮助我们找到图像的边缘。函数: cv.filter2D()下面我们将对一幅图像使用平均滤波器。下面是一个 5x5 的平均滤波器核:操作如下:将核放在图像的一个像素 A 上,求与核对应的图像上 25(5x5)个像素的和...原创 2020-03-12 15:29:32 · 98 阅读 · 0 评论 -
OPENCV_PYTHON官方文档学习_7.颜色空间转换
函数:cv2.cvtColor(),cv2.inRange()转换颜色空间cv2.cvtColor(input_image,flag),其中 flag就是转换类型。opencv中常用的颜色转换一般就两种:BGR↔Gray 和BGR↔HSV。对应的flag分别为:cv2.COLOR_BGR2GRAY和cv2.COLOR_BGR2HSV。PS:HSV 格式中,H(色彩/色度)的取值范围是 [...原创 2020-03-12 10:47:09 · 160 阅读 · 0 评论 -
OPENCV_PYTHON官方文档学习_6.程序性能检测及优化
检测程序的效率函数:cv2.getTickCount,cv2.getTickFrequency使用 OpenCV 检测程序效率cv2.getTickCount 函数返回从参考点到这个函数被执行的时钟数。所以当你在一个函数执行前后都调用它的话,你就会得这个函数的执行时间(时钟数)。cv2.getTickFrequency 返回时钟频率,或者说每秒钟的时数。所以你可以按照下面的方式得到一个函数...原创 2020-03-11 17:18:14 · 152 阅读 · 0 评论 -
OPENCV_PYTHON官方文档学习_5.图像上的算术运算
函数:cv2.add(),cv2.addWeighted() 等图像加法PS:OpenCV 中的加法与 Numpy 的加法是有所不同的。OpenCV 的加法是一种饱和操作,而 Numpy 的加法是一种模操作。代码:x = np.uint8([250])y = np.uint8([10])print (cv2.add(x,y)) # 250+10 = 260 => 255[[25...原创 2020-03-11 17:07:59 · 103 阅读 · 0 评论 -
OPENCV_PYTHON官方文档学习_4.图像的基本操作
获取并修改像素值读入一幅图像:import cv2import numpy as npimg=cv2.imread('/home/duan/workspace/opencv/images/roi.jpg')px=img[100,100]print (px)blue=img[100,100,0]print (blue)## [57 63 68]## 57修改像素值imp...原创 2020-03-11 16:42:49 · 287 阅读 · 0 评论 -
OPENCV_PYTHON官方文档学习_3.OPENCV中的绘图函数
主要函数:cv2.line(),cv2.circle(),cv2.rectangle(),cv2.ellipse(),cv2.putText()代码上面所有的这些绘图函数需要设置下面这些参数:• img:你想要绘制图形的那幅图像。• color:形状的颜色。以 RGB 为例,需要传入一个元组,例如:(255,0,0)代表蓝色。对于灰度图只需要传入灰度值。• thickness:线条的粗...原创 2020-03-11 15:48:30 · 190 阅读 · 0 评论 -
OPENCV_PYTHON官方文档学习_2.读取显示保存视频
主要函数:cv2.VideoCapture(),cv2.VideoWrite()摄像头获取视频首先创建一个 VideoCapture 对象。他的参数可以是设备的索引号,或者是一个视频文件。from cv2 import cv2 import numpy as npcap = cv2.VideoCapture(0) #打开摄像头,0代表的是设备id,如果有多个摄像头,可以设置其他数值...原创 2020-03-11 14:59:37 · 166 阅读 · 0 评论 -
OPENCV_PYTHON官方文档学习_1.读取加载保存图像
opencv读取加载保存图像以下主要参考opencv_python官方文档,会有一些自己的补充。主要函数:cv2.imread(),cv2.imshow(),cv2.imwrite()读取/显示图像from cv2 import cv2 import numpy as npimg = cv2.imread('E:/VS repo/test/test/opencv-python/mes...原创 2020-03-11 11:18:49 · 190 阅读 · 0 评论