
【OpenCV】
文章平均质量分 74
c橘子
这个作者很懒,什么都没留下…
展开
-
OpenCV - GrabCut 算法抠图(Python实现)
原理开始时用户需要用一个矩形将前景区域框住(前景区域应该完全被包括在矩形框内部)。然后算法进行迭代式分割直达达到最好结果。函数mask, bgdModel, fgdModel = cv2.grabCut(img, mask, rect, bgdModel, fgdModel, iterCount, mode=None)参数img输入图像mask掩模图像,用来...原创 2019-07-19 14:26:59 · 7450 阅读 · 3 评论 -
OpenCV - 傅里叶变换(Python实现)
原理傅里叶变换经常被用来分析不同滤波器的频率特性。我们可以使用 2D 离散傅里叶变换 (DFT) 分析图像的频域特性。翻译 2019-07-06 17:27:34 · 1474 阅读 · 0 评论 -
OpenCV - 分水岭算法图像分割(Python实现)
原理分水岭分割方法,是一种基于拓扑理论的数学形态学的分割方法,其基本思想是把图像看作是测地学上的拓扑地貌,图像中每一点像素的灰度值表示该点的海拔高度,每一个局部极小值及其影响区域称为集水盆,而集水盆的边界则形成分水岭。分水岭的概念和形成可以通过模拟浸入过程来说明。在每一个局部极小值表面,刺穿一个小孔,然后把整个模型慢慢浸入水中,随着浸入的加深,每一个局部极小值的影响域慢慢向外扩展,在两个集水盆汇...翻译 2019-07-15 21:31:58 · 2929 阅读 · 1 评论 -
OpenCV - Hough 圆环变换(Python实现)
原理圆形的一般性方程表示为(x-a)²+(y-b)²=r²。那么就有三个自由度圆心坐标a,b,和半径r。这就意味着一个圆需要三个参数来确定。 OpenCV 中提供的 cv.HoughCircle() 函数里面可以设定半径r的取值范围,相当于有一个先验设定,在每一个r来说,在二维空间内寻找a和b就可以了,能够减少计算量。函数cv2.HoughCircles(image, method, dp,...翻译 2019-07-14 18:29:49 · 916 阅读 · 0 评论 -
OpenCV - Hough 直线变换(Python实现)
原理直线可以通过类似 y = mx + c 或 极坐标 ρ = x cosθ + y sinθ(其中ρ表示原点到直线的垂直距离,θ是垂直线与水平轴之间的逆时针方向夹角,方向主要取决于如何放置坐标系)来表示。如果线经过原点下方,那就有小于180°的正[RHO][1]和夹角。如果线经过原点上方,相较于使用大于180°的夹角,opencv会选择使用小于180°的夹角,并采用负的RHO。垂直线是0°,...翻译 2019-07-13 15:53:22 · 1507 阅读 · 0 评论 -
OpenCV - 直方图反向投影(Python实现)
原理翻译 2019-06-28 21:43:50 · 1662 阅读 · 0 评论 -
OpenCV - 2D 直方图(Python实现)
介绍在 2D 直方图中我们要考虑两个图像特征。对于彩色图像的直方图通常情况下我们需要考虑每个的颜色(Hue)和饱和度(Saturation)。根据这两个特征绘制 2D 直方图Numpy中的2D直方图np.histogram2d() (注意,对于1D直方图,我们使用np.histogram())hist, xbins, ybins = np.histogram2d(h.ravel(),s....翻译 2019-06-28 11:15:32 · 410 阅读 · 0 评论 -
OpenCV - 模板匹配(Python实现)
原理模板匹配是在一幅图像中寻找一个特定目标的方法之一,这种方法的原理非常简单,遍历图像中的每一个可能的位置,比较各处与模板是否“相似”,当相似度足够高时,就认为找到了我们的目标。OpenCV提供了6种模板匹配算法:匹配算法method平方差匹配法CV.TM_SQDIFF归一化平方差匹配法CV.TM_SQDIFF_NORMED相关匹配法CV.TM_CCORR...翻译 2019-07-08 23:36:51 · 19709 阅读 · 3 评论 -
OpenCV - Harris 角点检测(Python实现)
OpenCV 中的 Harris 角点检测函数cv2.cornerHarris(src, blockSize, ksize, k, dst=None, borderType=None)参数src数据类型为 float32 的输入图像blockSize角点检测中考虑的区域大小ksizeSobel求导中使用的窗口大小kHarris 角点检测方程中的...翻译 2019-07-20 23:11:22 · 2104 阅读 · 0 评论 -
OpenCV - SIFT-SURF(Python实现)
实现步骤cv2.xfeatures2d.SIFT_create(实例化sift)sift.detect(找出关键点)cv2.drawKeypoints(画出关键点)sift.compute(根据关键点计算sift向量)参数sift = cv2.xfeatures2d.SIFT_create()参数说明:sift为实例化的sift函数kp = sift.detect(gray,...翻译 2019-07-25 17:29:38 · 4482 阅读 · 1 评论 -
OpenCV - 图像修补(Python实现)
#图片修补import cv2import numpy as npimg = cv2.imread('img.jpg',1)#画两条线for i in range(200,300): img[i,200] = (255,255,255) img[i,200+1] = (255,255,255) img[i,200-1] = (255,255,255)for i ...原创 2019-09-26 20:43:03 · 3021 阅读 · 0 评论 -
OpenCV - Sobel算子源码实现边缘检测(Python实现)
Soble算子边缘检测就用算子模板卷积求像素点的梯度,如果梯度大于设定值则认为是边缘点,否则不是边缘点。import cv2import numpy as npimport randomimport mathimg = cv2.imread("img.jpg",1)imgInfo = img.shapeheight = imgInfo[0]width = imgInfo[1]cv...原创 2019-09-25 21:43:16 · 2231 阅读 · 1 评论 -
OpenCV - ORB算法(Python实现)
原理ORB(Oriented FAST and Rotated BRIEF)是一种快速特征点提取和描述的算法,这个算法是由Ethan Rublee, Vincent Rabaud, Kurt Konolige以及Gary R.Bradski在2011年一篇名为“ORB:An Efficient Alternative to SIFTor SURF”的文章中提出.ORB算法分为两部分,分别是特征点...翻译 2019-07-27 17:50:35 · 3628 阅读 · 0 评论 -
OpenCV - BRIEF特征描述子(Python实现)
原理BRIEF:一种对已检测到的特征点进行描述的算法,它是一种二进制编码的描述子,在图像匹配时使用BRIEF能极大的提升匹配速度.代码import numpy as npimport cv2from matplotlib import pyplot as pltimg = cv2.imread('image.jpg',0)# Initiate FAST detectorstar ...翻译 2019-07-27 17:43:54 · 1928 阅读 · 0 评论 -
OpenCV - 使用特征匹配和单应性查找对象(Python实现)
基础联合使用特征提取和 calib3d 模块中的 findHomography 在复杂图像中查找已知对象.之前在一张杂乱的图像中找到了一个对象(的某些部分)的位置。这些信息足以帮助我们在目标图像中准确的找到(查询图像)对象。为了达到这个目的可以使用 calib3d 模块中的cv2.findHomography()函数.如果将这两幅图像中的特征点集传给这个函数,他就会找到这个对象的透视图变换。然...原创 2019-08-01 13:55:55 · 955 阅读 · 0 评论 -
OpenCV - FAST 算法(Python实现)
原理FAST 全称 Features from accelerated segment test,一种用于角点检测的算法,该算法的原理是取图像中检测点,以该点为圆心的周围的16个像素点判断检测点是否为角点,通俗的讲就是中心的的像素值比大部分周围的像素值要亮一个阈值或者暗一个阈值则为角点.步骤.一个以像素p为中心,半径为3的圆上,有16个像素点(p1、p2、…、p16)定义一个阈值,计算...翻译 2019-07-26 17:49:47 · 1418 阅读 · 0 评论 -
OpenCV - 特征匹配(Python实现)
蛮力( Brute-Force)匹配Brute-Force匹配非常简单,首先在第一幅图像中选取一个关键点然后依次与第二幅图像的每个关键点进行(描述符)距离测试,最后返回距离最近的关键点.对于BF匹配器,首先我们必须使用cv2.BFMatcher()创建 BFMatcher 对象。它需要两个可选的参数.第一个是normType,它指定要使用的距离测量,默认情况下,它是cv2.NORM_L2....原创 2019-07-31 14:48:56 · 3833 阅读 · 0 评论 -
OpenCV - Shi-Tomasi 角点检测 (Python实现)
原理Shi-Tomasi 使用的打分函数为:R = min (λ1; λ2)如果打分超过阈值,我们就认为它是一个角点。我们可以把它绘制到 λ1 ~λ2 空间中,就会得到下图:从这幅图中,我们可以看出来只有当 λ1 和 λ2 都大于最小值时,才被认为是角点(绿色区域)。函数cv2.goodFeaturesToTrack ( image, maxcorners, qualityLevel...翻译 2019-07-21 21:42:32 · 987 阅读 · 0 评论 -
OpenCV - 轮廓:更多函数(Python实现)
凸缺陷凸包(Convex Hull)是一个计算几何(图形学)中的概念,它的严格的数学定义为:在一个向量空间V中,对于给定集合X,所有包含X的凸集的交集S被称为X的凸包。 在图像处理过程中,我们常常需要寻找图像中包围某个物体的凸包。凸包跟多边形逼近很像,只不过它是包围物体最外层的一个凸集,这个凸集是所有能包围这个物体的凸集的交集。 OpenCV中有一个函数cv2.convexityDefe...翻译 2019-06-24 22:04:44 · 675 阅读 · 0 评论 -
OpenCV - 轮廓的性质(Python实现)
长宽比边界矩形的宽高比x,y,w,h = cv2.boundingRect(cnt)aspect_ratio = float(w)/hExtent轮廓面积与边界矩形面积的比area = cv2.contourArea(cnt)x,y,w,h = cv2.boundingRect(cnt)rect_area = w*hextent = float(area)/rect_a...翻译 2019-06-22 12:21:57 · 982 阅读 · 0 评论 -
OpenCV - 颜色空间转换(Python实现)
转换颜色空间最常用的两种颜色空间方法 : BGR–Gray 和 BGR–HSV。cv2.cvtColor(input_image, flag)input_image 转换的图像flag 转换类型 对于 BGR-Gray 的转换,我们要使用的 flag 就是cv2.COLOR_BGR2GRAY。 对于 BGR-HSV 的转换,我们用的 flag 就是cv2.COLOR_BGR2...原创 2019-05-23 11:53:28 · 1987 阅读 · 0 评论 -
OpenCV - 滑动条画圆(Python实现)
函数说明:主要通过cv2.getTrackbarPos(), cv2.creatTrackbar()两个函数来获取滑动条位置和创建滑动条。cv2.getTrackbarPos()函数有五个参数——————————————————第一个参数是 滑动条的名字第二个参数是 滑动条被放置窗口的名字第三个参数是 滑动条的默认位置第四个参数是 滑动条的最大值第五个函数是 回调函数...原创 2019-05-12 16:52:00 · 467 阅读 · 0 评论 -
OpenCV - 处理鼠标事件(Python实现)
打印鼠标事件我们首先打印出鼠标的事件:代码:import cv2events=[i for i in dir(cv2) if 'EVENT'in i] #将全部事件保存在列表中print (events) #将列表打印 结果:EVENT_FLAG_LBUTTON 1 #左鍵拖曳 EVENT_FL...原创 2019-05-11 11:37:29 · 6422 阅读 · 2 评论 -
OpenCV - 绘图函数(Python实现)
1. 画线• img:你想要绘制图形的那幅图像。• color:形状的颜色。以 RGB 为例,需要传入一个元组,例如:(255,0,0)代表蓝色。对于灰度图只需要传入灰度值。• thickness:线条的粗细。如果给一个闭合图形设置为 -1,那么这个图形就会被填充。默认值是 1.• linetype:线条的类型, 8 连接,抗锯齿等。默认情况是 8 连接。 cv2.LINE_AA为抗...原创 2019-05-10 22:16:48 · 1186 阅读 · 0 评论 -
OpenCV - 图像上的算术运算(Python实现)
图像加法图像加法就是将两个图像的像素分别相加起来。我们可以使用 cv2.add() 或 numpy 中的加法进行操作。但是同样是8位数据,在cv中进行加法是一种饱和操作,而numpy中的加法是一种取模操作。x = np.uint8([250])y = np.uint8([10])print (cv2.add(x,y)) # 250+10 = 260 => 255[[255...原创 2019-05-20 21:21:13 · 832 阅读 · 0 评论 -
OpenCV - 图像及视频读写(Python实现)
读/写图像文件OpenCV通过imread()函数和imwrite()函数进行图像读写。import cv2image = cv2.imread('02CV.png') #读取图片 默认为彩色cv2.imwrite('MyPic.jpg', image)#保存为jpg格式 ①imread()函数的第一个参数是需要读入的图像文件,需要注意的是这幅图像需要在程序工作路径或提供绝对路径。...原创 2019-05-10 19:01:06 · 1237 阅读 · 1 评论 -
OpenCV - 像素操作(Python实现)
获取像素值并修改首先需要读取一幅彩色图像,我们知道一幅图像可以看做一个三维矩阵,所以可以通过列表访问图像一个像素点。#像素操作基础import cv2import numpy as npimg=cv2.imread('MyPic.jpg') #读取一幅图像px=img[100,100] #读取像素点print (px)blue=img[100,100,0] #读取该点B值pr...原创 2019-05-19 16:51:21 · 6627 阅读 · 0 评论 -
OpenCV - 图像梯度(Python实现)
原理梯度简单来说就是求导。OpenCV 提供了三种不同的梯度滤波器,或者说高通滤波器: Sobel,Scharr 和 Laplacian。我们会意义介绍他们。Sobel, Scharr 其实就是求一阶或二阶导数。 Scharr 是对 Sobel(使用小的卷积核求解求解梯度角度时)的优化。 Laplacian 是求二阶导数。import cv2import numpy as npfrom...原创 2019-06-12 19:37:16 · 591 阅读 · 0 评论 -
OpenCV - Canny 边缘检测(Python实现)
Canny 边缘检测在 OpenCV 中只需要一个函数: cv2.Canny(),就可以完成以上几步。让我们看如何使用这个函数。这个函数的第一个参数是输入图像。第二和第三个分别是 minVal 和 maxVal。第三个参数设置用来计算图像梯度的 Sobel卷积核的大小,默认值为 3。最后一个参数是 L2gradient,它可以用来设定求梯度大小的方程。如果设为 True,就会使用我们上面提到过的...原创 2019-06-12 19:57:20 · 2211 阅读 · 0 评论 -
OpenCV - 直方图均衡化(Python实现)
原理直方图均衡化是图像处理领域中利用图像直方图对对比度进行调整的方法。这种方法通常用来增加许多图像的全局对比度,尤其是当图像的有用数据的对比度相当接近的时候。直方图均衡化import cv2import numpy as npfrom matplotlib import pyplot as pltimg = cv2.imread('image.jpg',0)#flatten() 将...翻译 2019-06-25 07:04:16 · 31881 阅读 · 3 评论 -
OpenCV - 直方图绘制(Python实现)
原理 直方图的 x 轴是灰度值(0 到 255), y 轴是图片中具有同一个灰度值的点的数目。直方图其实就是对图像的另一种解释。通过直方图我们可以对图像的对比度,亮度,灰度分布等有一个直观的认识。相关术语BINS: 上面的直方图显示了每个灰度值对应的像素数。DIMS:表示我们收集数据的参数数目。如果我们对收集到的数据只考虑一件事:灰度值。所以这里就是 1。RANGE:就是要统计的灰度值...翻译 2019-06-25 06:23:27 · 3745 阅读 · 0 评论 -
OpenCV - 初识轮廓(Python实现)
什么是轮廓轮廓可以简单认为成将连续的点(连着边界)连在一起的曲线,具有相同的颜色或者灰度。轮廓在形状分析和物体的检测和识别中很有用怎样查找轮廓cv2.findContours(image, mode, method[, offset])#寻找一个二值图像的轮廓。注意黑色表示背景,白色表示物体,即在黑色背景里寻找白色物体的轮廓参数:image:8位单通道图像。非零像素值视为...原创 2019-06-15 20:45:32 · 522 阅读 · 0 评论 -
OpenCV - 图像平滑(Python实现)
2D卷积与以为信号一样, 我们也可以对 2D 图像实施低通滤波(LPF),高通滤波(HPF)等。 LPF 帮助我们去除噪音,模糊图像。 HPF 帮助我们找到图像的边缘OpenCV 提供的函数 cv.filter2D() 可以让我们对一幅图像进行卷积操作。 cv.filter2D()(src, ddepth, kernel[, dst[, anchor[, delta[, borderTy...原创 2019-06-03 19:37:51 · 3034 阅读 · 0 评论 -
OpenCV - 轮廓特征(Python实现)
矩图像的矩可以帮助我们计算图像的质心,面积等。import cv2import numpy as npimg = cv2.imread('image.png',0)ret,thresh = cv2.threshold(img,127,255,0)im,contours,hierarchy = cv2.findContours(thresh, 1, 2)cnt = contours...翻译 2019-06-18 21:28:37 · 5973 阅读 · 0 评论 -
OpenCV - 图像阈值(Python实现)
简单阈值分割与名字一样,这种方法非常简单。但像素值高于阈值时(大部分情况为127),我们给这个像素赋予一个新值(可能是白色),否则我们给它赋予另外一种颜色(也许是黑色)。这个函数就是 cv2.threshhold()。cv2.threshold (src, thresh, maxval, type)参数解释src源图片,必须是单通道thresh阈值,取...原创 2019-06-02 19:19:49 · 8208 阅读 · 1 评论 -
OpenCV - 形态学转换(Python实现)
结构化元素使用 Numpy 构建结构化元素,它是正方形的。但有时我们需要构建一个椭圆形/圆形的核。为了实现这种要求,提供了 OpenCV函数 cv2.getStructuringElement()。cv2.getStructuringElement( )第一个参数表示内核的形状,有三种形状可以选择。矩形:MORPH_RECT;交叉形:MORPH_CROSS;椭圆形:MORPH_ELL...原创 2019-06-07 23:58:12 · 869 阅读 · 0 评论 -
OpenCV - 几何变换(Python实现)
扩展缩放扩展缩放就是放大或缩小图像的尺寸,使用 cv2.resize() 可以实现这个功能。图像的尺寸可以自己手动设置,你也可以指定缩放因子。cv2.resize(InputArray src, OutputArray dst, Size, fx, fy, interpolation)参数说明InputArray src输入图片OutputArray ds...原创 2019-05-29 18:04:12 · 468 阅读 · 0 评论 -
OpenCV - Haar+Adaboost人脸检测(Python实现)
特征:像素经过运算之后得到的某一个结果。Harr特征haar特征主要分为以下几类:特征 = 整个区域权重1 + 黑色权重权重2= (黑+白)1+黑(-2)= 黑 + 白-黑2= 白- 黑遍历过程从上到下从左到右依次遍历,要考虑图片以及模板大小。当图片size=100100 模板size=1010,需要100张模板才能覆盖再有很多次缩放之后运算量就会很大。就引入了积分图。积分图...原创 2019-09-27 08:57:18 · 3444 阅读 · 0 评论