OpenCV-Python教程
hpuhjl
这个作者很懒,什么都没留下…
展开
-
OpenCV-Python Tutorials - 1. 1. OpenCV简介
OpenCVOpenCV于1999年由Gary Bradsky在英特尔创立,并于2000年发布第一个版本。 随后Vadim Pisarevsky加入了Gary Bradsky负责管理英特尔的俄罗斯软件OpenCV团队。 2005年,OpenCV被用于Stanley车型,并赢得2005年DARPA挑战。 后来,它在Willow Garage的支持下由Gary Bradsky和Vadim Pisar...原创 2019-03-05 16:54:16 · 520 阅读 · 0 评论 -
OpenCV-Python Tutorials - 4.8. 图像金字塔
目标:了解Image Pyramids使用Image金字塔创建一个新的水果,‘Orapple’了解函数:cv.pyrUp(),cv.pyrDown()理论通常,我们曾经使用恒定大小的图像。但在某些情况下,我们需要使用不同分辨率的(相同)图像。例如,在搜索图像中的某些内容时,如脸部,我们不确定该对象在所述图像中的大小。在这种情况下,我们需要创建一组具有不同分辨率的相同图像,并在所有图...原创 2019-03-07 13:20:35 · 410 阅读 · 0 评论 -
OpenCV-Python Tutorials - 4.9.1. 轮廓:入门
目标:了解什么是轮廓学习查找轮廓,绘制轮廓函数: cv.findContours(), cv.drawContours()什么是轮廓?轮廓可以简单地解释为连接所有具有相同的颜色或强度的连续点(沿着边界)的曲线。轮廓是形状分析和物体检测和识别的很有用的工具。为了更好的准确性,使用二进制图像,因此,在找到轮廓之前,应用阈值或canny边缘检测。从OpenCV 3.2开始,find...原创 2019-03-07 13:21:10 · 358 阅读 · 0 评论 -
OpenCV-Python Tutorials - 4.9.2. 轮廓特征
目标:本章节你需要学习以下内容:查找轮廓的不同特征,如面积,周长,质心,边界框等1. 矩图像的矩可帮助你计算某些特征,如对象的质心,对象的面积等特征。具体定义可以查看图像的矩的维基百科页面函数cv.moments()给出了计算的所有矩值的字典。import numpy as npimport cv2 as cvimg = cv.imread('star.jpg',0)re...原创 2019-03-07 13:21:43 · 482 阅读 · 0 评论 -
OpenCV-Python Tutorials - 4.9.3. 轮廓属性
目标:学习提取一些常用的对象属性,如Solidity,Equivalent Diameter,Mask image,Mean Intensity1. Aspect Ratio(长宽比)它是对象的边界矩形的宽度与高度的比。Aspect Ratio=WidthHeight Aspect\ Ratio= \frac{Width}{Height} Aspect Ratio...原创 2019-03-08 09:57:52 · 246 阅读 · 0 评论 -
OpenCV-Python Tutorials - 4.9.4. 轮廓:更多函数
凸缺陷我们在前面学到了关于轮廓的凸包。物体与该凸包的任何偏差都可以被认为是凸缺陷。OpenCV附带了一个现成的函数来查找它,cv.convexityDefects()。基本函数调用如下所示:hull = cv.convexHull(cnt,returnPoints = False)defects = cv.convexityDefects(cnt,hull)注意:我们必须在找到凸包时...原创 2019-03-08 09:59:24 · 304 阅读 · 0 评论 -
OpenCV-Python Tutorials - 4.9.5. 轮廓:层次结构
轮廓层次结构理论在最近几篇关于轮廓的文章中,我们使用了与OpenCV提供的轮廓相关的几个函数。但是当我们使用cv.findContours()函数在图像中找到轮廓时,我们已经传递了一个参数Contour Retrieval Mode。我们通常传递cv.RETR_LIST或cv.RETR_TREE,它运行的效果很好。但它究竟意味着什么?此外,在输出中,我们得到三个数组,第一个是图像,第二个是我...原创 2019-03-08 10:00:49 · 426 阅读 · 0 评论 -
OpenCV-Python Tutorials - 4.10.1 直方图1:查找,绘画,分析
理论直方图是什么?你可以将直方图视为图形或绘图,它可以让你全面了解图像的强度分布。它是在X轴上具有像素值(范围从0到255,并非总是)的图和在Y轴上的图像中的对应像素数。这只是理解图像的另一种方式。通过查看图像的直方图,你可以直观了解该图像的对比度,亮度,强度分布等。今天几乎所有的图像处理工具都提供了直方图的功能。以下是来自Cambridge in Color网站的图片,我建议你访问该网站了...原创 2019-03-08 10:01:35 · 321 阅读 · 0 评论 -
OpenCV-Python Tutorials - 4.10.2 直方图2:均衡直方图
目标学习直方图均衡化的概念,并利用它来提高图像对比度理论考虑一个像素值仅限于某些特定值范围的图像。 例如,较亮的图像将所有像素限制为高值。 但是,良好的图像将具有来自图像的所有区域的像素。 所以你需要将这个直方图拉伸到两端(如下图所示,来自维基百科),这就是直方图均衡所做的,通常可以改善图像的对比度。建议阅读直方图均衡的维基百科页面,了解更多相关细节。 它有一个非常好的解释和解决的...原创 2019-03-08 10:02:08 · 343 阅读 · 0 评论 -
OpenCV-Python Tutorials - 4.10.3. 直方图3:2D直方图
目标学习寻找和绘制二维直方图介绍我们学习计算并绘制了一维直方图。 它之所以被称为一维,是因为我们只考虑一个特征,即像素的灰度强度值。 但在二维直方图中,需要考虑两个特征。 通常,它用于查找颜色直方图,其中两个特征是每个像素的色调值和饱和度值。有一个python样本(samples / python / color_histogram.py)已经用于查找颜色直方图。 我们将尝试了解如何...原创 2019-03-08 10:04:43 · 402 阅读 · 0 评论 -
OpenCV-Python Tutorials - 4.10.4. 反投影直方图
目标:学习直方图的反向投影理论它由Michael J. Swain,Dana H. Ballard在他们的论文“Indexing via color histograms”中提出。用简单的话来说,它到底是什么?它用于图像分割或查找图像中感兴趣的对象。简单地说,它创建了与输入图像大小相同(但是是单一通道)的图像,其中每个像素对应于该像素属于对象的概率。在更简单的世界中,输出的图像将使我...原创 2019-03-08 10:05:22 · 375 阅读 · 0 评论 -
OpenCV-Python Tutorials - 4.11.1 傅里叶变换
目标:使用OpenCV查找图像的傅立叶变换使用Numpy中提供的FFT函数傅立叶变换的一些应用我们将看到以下函数:cv.dft(),cv.idft()等理论傅立叶变换用于分析各种滤波器的频率特性。对于图像,2D离散傅里叶变换(DFT)用于找到频域。称为快速傅里叶变换(FFT)的快速算法用于计算DFT。有关这些的详细信息可以在任何图像处理或信号处理教科书中找到。对于正弦信号,x(...原创 2019-03-08 10:05:57 · 452 阅读 · 0 评论 -
OpenCV-Python Tutorials - 4.12. 模板匹配
目标:使用模板匹配查找图像中的对象函数:cv.matchTemplate(),cv.minMaxLoc()理论模板匹配是一种在较大图像中搜索和查找模板图像位置的方法。为此,OpenCV附带了一个函数cv.matchTemplate()。它只是在输入图像上滑动模板图像(如在2D卷积中),并比较模板图像下的输入图像的模板和补丁。在OpenCV中实现了几种比较方法。 (你可以查看文档以获取...原创 2019-03-08 10:06:30 · 375 阅读 · 0 评论 -
OpenCV-Python Tutorials - 4.13. 霍夫线变换
目标:理解霍夫变换的概念如何使用它来检测图像中的线条函数:cv.HoughLines(),cv.HoughLinesP()理论霍夫变换是一种流行的检测形状的技术,如果你可以用数学形式表示形状的话。它可以检测形状,即使它是破碎或扭曲了一点。我们来看看它是如何作用于直线的。线可以表示为y=mx+c y=mx+c y=mx+c或以参数形式表示为ρ=x cosθ+y ...原创 2019-03-08 10:07:02 · 342 阅读 · 0 评论 -
OpenCV-Python Tutorials - 4.7. Canny边缘检测
目标:Canny边缘检测的概念OpenCV的功能:cv.Canny()理论Canny边缘检测是一种流行的边缘检测算法,它是由John F. Canny开发的。1. 这是一个多阶段算法,我们将了解其中的每个阶段。2. 降噪由于边缘检测易受图像中的噪声影响,因此第一步是使用5x5高斯滤波器去除图像中的噪声。我们在之前的章节中已经看到了这一点。3. 计算图像的强度梯度然后在水平和...原创 2019-03-07 13:19:47 · 516 阅读 · 0 评论 -
OpenCV-Python Tutorials - 4.6. 图形梯度
目标:查找图像梯度,边缘等学习函数:cv.Sobel(),cv.Scharr(),cv.Laplacian()理论OpenCV提供三种类型的梯度滤波器或高通滤波器,Sobel,Scharr和Laplacian。1. Sobel和ScharrSobel算子是高斯联合平滑加微分运算,因此它更能抵抗噪声。你可以指定要采用的导数的方向,垂直或水平(yorder和xorder),你还可以通...原创 2019-03-07 13:19:12 · 532 阅读 · 0 评论 -
OpenCV-Python Tutorials - 4.5. 形态变换
目标:学习不同的形态学操作,如侵蚀,膨胀,开放,关闭等学习不同的函数,如:cv.erode(),cv.dilate(),cv.morphologyEx()等理论形态学转换是基于图像形状的一些简单操作。它通常在二进制图像上执行。它需要两个输入参数,一个是我们的原始图像,第二个是称为结构元素或核,它决定了操作的性质。腐蚀和膨胀是两个基本的形态学运算符。然后它的变体形式如开运算,闭运算,梯...原创 2019-03-07 13:18:33 · 522 阅读 · 0 评论 -
OpenCV-Python Tutorials - 2. 1. 图像入门
目标:学会如何读取、显示以及保存图像学习函数:cv.imread(), cv.imshow(), cv.imwrite()用Matplotlib显示图像OpenCV的使用读取图像cv.imread()函数用于读取图像,需要注意的是,该图像应该处在Python代码源文件或者已给出完整路径的工作目录中。针对函数的第二个参数,通过以下几个例子分别说明各自功能。cv.IMREAD_C...原创 2019-03-05 16:55:50 · 384 阅读 · 0 评论 -
OpenCV-Python Tutorials - 2. 2. 视频入门
目标:学习读取、显示和保存视频用摄像头捕获并显示视频学会使用函数:cv.VideoCapture(), cv.VideoWriter()用摄像头捕获视频通常,我们需要用摄像头来捕获直播画面,OpenCV为此提供了一些非常简单的函数接口。下面我们来尝试用摄像头来捕获视频画面(我使用的是电脑的内置摄像头)并将画面转化成灰度图像显示,这项操作很简单。如果要捕获视频,首先要做的是创建一个...原创 2019-03-05 16:56:34 · 258 阅读 · 0 评论 -
OpenCV-Python Tutorials - 2.3. OpenCV中的绘图功能
目标:用OpenCV绘制图形掌握函数:cv.line(), cv.circle() , cv.rectangle(), cv.ellipse(), cv.putText()代码上述函数的参数:img:用于设置图像color:用于设置颜色。是一个RGR值,将用元组传递,例如:(255,0,0)为蓝色。对于灰度图像,只需传递标量值。thickness:用于设置线条或圆形等的厚度。...原创 2019-03-05 16:57:51 · 404 阅读 · 0 评论 -
OpenCV-Python Tutorials - 2.4. 把鼠标作为画笔
目标:学习用OpenCV控制鼠标事件学习以下函数:cv.setMouseCallback()一个简单的示例这里我们来创建一个简单的程序,他会在图片上你双击的位置绘制一个圆圈。首先我们来创建一个鼠标事件回调函数,鼠标事件发生是他就会被执行。鼠标事件可以是鼠标上的任何动作,比如左键按下,左键松开,左键双击等。我们可以通过鼠标事件获得与鼠标对应的图片上的坐标。根据这些信息我们可以做任何我们...原创 2019-03-05 17:00:49 · 346 阅读 · 0 评论 -
OpenCV-Python Tutorials - 2.5. 用滑动条做调色板
目标:学习把滑动条绑定到OpenCV窗口中学习以下函数:cv.getTrackbarPos(), cv.createTrackbar()代码示例在这里,我们将创建一个简单的应用程序,完成显示指定的颜色。你有一个显示颜色的窗口和三个滑动条,分别用于指定B,G,R各颜色。你可以去拖动滑动条上的按钮去更改窗口所显示的颜色。默认情况下,初始颜色将设置为黑色。对于cv.getTrackbar...原创 2019-03-05 17:01:30 · 323 阅读 · 0 评论 -
OpenCV-Python Tutorials - 3.1. 图像的基本操作
目标:获取并修改图像的像素值获取图像的属性设置感兴趣区域(ROI)图像的拆分和合并本节中的几乎所有操作主要与Numpy有关,而不是和OpenCV有关。使用OpenCV编写更好的优化代码需要先熟悉Numpy注意:示例将在Python终端中显示,因为大多数只是单行代码获取并修改图像的像素值首先我们先加载一张彩色图像:>>> import numpy as ...原创 2019-03-05 17:02:38 · 351 阅读 · 0 评论 -
OpenCV-Python Tutorials - 3.2. 图像的算术运算
目标:学习对图像的几种运算,如加法、减法、按位运算等学习以下函数: cv.add(), cv.addWeighted()图像的加法你可以使用OpenCV的cv.add()函数把两幅图像相加,或者可以简单地通过numpy操作添加两个图像,如res = img1 + img2。两个图像应该具有相同的大小和类型,或者第二个图像可以是标量值。注意:OpenCV加法和Numpy加法之间存在...原创 2019-03-05 17:03:41 · 394 阅读 · 0 评论 -
OpenCV-Python Tutorials - 3.3. 绩效评估和改进技术
目标:在图像处理中,由于每秒需要处理大量操作,因此处理图像的代码必须不仅要能给出正确的结果,同时还必须要快。所以在本小节中,学习:衡量代码的性能。一些优化代码性能的技巧学习以下函数:cv.getTickCount, cv.getTickFrequency除了OpenCV库之外,Python还提供了一个time模块,有助于测量执行时间。另一个profile模块可以获得有关代码的详细报...原创 2019-03-05 17:04:29 · 296 阅读 · 0 评论 -
OpenCV-Python Tutorials - 4.1. 改变颜色空间
目标:学习将图像从一个颜色空间转换为另一个颜色空间,例如BGR↔Gray,BGR↔HSV创建一个提取视频中某个特定彩色对象的应用程序学习以下函数:cv.cvtColor(),cv.inRange()改变色彩空间OpenCV中有150多种颜色空间转换方法。我们只研究两种最广泛使用的转换方法,BGR↔Gray和BGR↔HSV。对于颜色转换,使用函数cv.cvtColor(input_...原创 2019-03-07 13:15:54 · 750 阅读 · 0 评论 -
OpenCV-Python Tutorials - 4.2. 图像的几何变换
目标将不同的几何变换应用于图像,如平移,旋转,仿射变换学习函数:cv.getPerspectiveTransform转换OpenCV提供了两个转换函数cv.warpAffine和cv.warpPerspective,你可以使用它们进行各种转换。cv.warpAffine采用2x3变换矩阵作为参数输入,而cv.warpPerspective采用3x3变换矩阵作为参数输入。缩放缩放只...原创 2019-03-07 13:16:31 · 901 阅读 · 0 评论 -
OpenCV-Python Tutorials - 4.3. 图像阈值
目标:学习简单的阈值处理,自适应阈值处理,Otsu’s的阈值处理等学习函数:cv.threshold,cv.adaptiveThreshold等简单阈值处理这种阈值处理的方法是简单易懂的。如果像素值大于阈值,则为其分配一个值(可以是白色),否则为其分配另一个值(可以是黑色)。使用的函数是cv.threshold。函数第一个参数是源图像,它应该是灰度图像。第二个参数是用于对像素值进行分...原创 2019-03-07 13:17:11 · 544 阅读 · 0 评论 -
OpenCV-Python Tutorials - 4.4. 图像滤波
目标:使用各种低通滤波器模糊图像将自定义滤波器应用于图像(2D卷积)2D卷积(图像过滤)与一维信号一样,图像也可以使用各种低通滤波器(LPF),高通滤波器(HPF)等进行滤波。LPF有助于消除噪声,模糊图像等。HPF滤波器有助于找到图片的边缘。OpenCV提供了一个函数cv.filter2D()来将卷积核与图像进行卷积。例如,我们将尝试对图像进行平均滤波。下面是一个5x5平均滤波器...原创 2019-03-07 13:17:56 · 701 阅读 · 0 评论 -
OpenCV-Python Tutorials - 4.14. 霍夫圆变换
目标:学习使用Hough变换来查找图像中的圆圈函数:cv.HoughCircles()理论圆圈在数学上表示为 (x−xcenter)2+(y−ycenter)2=r2\left ( x-x_{center} \right )^{2}+\left ( y-y_{center} \right )^{2}=r^{2} (x−xcenter)2+(y−ycenter)2=r2 其中 (x...原创 2019-05-15 13:30:56 · 285 阅读 · 0 评论