![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
Opencv-Python
文章平均质量分 79
龙王.*?
向来心是看客心,奈何人是剧中人。
展开
-
距离变换源码实现
目录前言原理源码效果前言有俩个坐标a(i,j),b(p,q)。欧式距离也叫DeD_{e}De,公式如下:De=(i−p)2+(j−q)22D_{e} = \sqrt[ 2]{(i-p)^2 +(j-q)^2}De=2(i−p)2+(j−q)2城区距离也叫D4D_{4}D4,公式如下:D4=∣i−p∣+∣j−q∣D_{4} = |i-p| + |j-q| D4=∣i−p∣+∣j−q∣棋盘距离也叫D8D_{8}D8,公式如下:D8=max{∣i−p∣,∣j−q∣}D_翻译 2021-06-06 22:22:55 · 495 阅读 · 0 评论 -
Opencv入门
Opencv入门读图、展示和保存新图基本线条操作基本几何操作平移 cv2.warpAffine旋转 cv2.getRotationMatrix2D cv2.warpAffine缩放 cv2.resize翻转 cv2.flip裁剪 切片位操作 cv2.bitwise_and cv2.bitwise_or cv2.bitwise_xor cv2.bitwise_notMasking操作色彩方面操作色彩通道分离与融合 cv2.spilt cv2.mer翻译 2020-07-29 18:56:16 · 325 阅读 · 0 评论 -
图像基础——图像形状特征提取
图像形状特征提取简单形状特征矩形度球状性圆形性质心坐标 cv.moments()中心距Opencv中图像轮廓拟合轮廓的查找与绘制OpenCV中轮廓的周长与面积几何图形的最小外包与拟合最小外包矩形 cv.minAreaRect()最小外包圆形 cv. minEnclosingCircle () cv.circle()最小外包三角形 cv.minEnclosingTriangle() cv.line()最小外包椭圆 cv. fitEllipse() cv.elli翻译 2020-07-28 22:24:12 · 11191 阅读 · 0 评论 -
Python实现LBP算法
LBP算法原始LBP算法圆形LBP旋转不变LBP等价LBP旋转不变等价LBP局部二值模式(Local Binary Pattern,LBP)的基本思想是将中心像素点的灰度值作为阈值,将其邻域内的像素点灰度值与阈值进行比较,从而得到二进制编码用以表述局部纹理特征。优势LBP表示方法不易受图像整体灰度线性变化的影响,当图像的灰度值发生线性均匀变化时,其LBP特征编码是不变的。LBP特征计算简单,表征能力强,在纹理特征描述上具有较好的效果。发展历史原始的LPB圆形LPB为了解决翻译 2020-07-28 12:20:44 · 12954 阅读 · 5 评论 -
图像基础—— 特征提取之颜色特征提取
颜色特征提取颜色直方图一般颜色直方图 cv2.calcHist全局累加直方图 np.cumsum()主色调直方图总结颜色矩颜色聚合向量颜色相关图图像特征是指可以对图像的特点或内容进行表征的一系列属性的集合,主要包括图像自然特征(如亮度、色彩、纹理等)和图像人为特征(如图像频谱、图像直方图等)。图像特征提取根据其相对尺度可分为全局特征提取和局部特征提取两类。全局特征提取关注图像的整体表征。常见的全局特征包括颜色特征、纹理特征、形状特征、空间位置关系特征等。局部特征提取关注图像的某个局翻译 2020-07-27 12:09:40 · 19885 阅读 · 2 评论 -
图像基础——频率滤波
频率滤波一维傅里叶变换相关数学公式画相关频谱图二维傅里叶变换相关数学公式画相关频谱图傅里叶变换的性质图像的频率滤波低通滤波理想低通滤波Butterworth低通滤波器高通滤波理想高通滤波一维傅里叶变换从物理效果看,傅立叶变换是将图像从空间域转换到频率域,傅立叶变换的物理意义是将图像的灰度分布函数变换为图像的频率分布函数,傅立叶逆变换是将图像的频率分布函数变换为灰度分布函数。图像的频率是表征图像中灰度变化剧烈程度的指标,是灰度在平面空间上的梯度。低频分量(低频信号):代表着图像中亮度或者灰度翻译 2020-07-26 16:48:17 · 2268 阅读 · 0 评论 -
图像基础——空间滤波
空间滤波综述平滑处理平滑线性空间滤波器(均值滤波器)盒状滤波器模板 cv2.blur()加权平均滤波器模板高斯平滑滤波器模板 cv2.GaussianBlur()双边滤波 cv2.bilateralFilter()2D卷积核 cv2.filter2D平滑非线性空间滤波器统计排序滤波器 cv2.medianBlur()添加噪声库方法 skimage.until.random_noise()锐化处理一阶微分算子任意一阶微分的定义Sobel算子 cv2.Sobel()Scharr算子 c翻译 2020-07-25 18:40:28 · 2351 阅读 · 0 评论 -
Opencv笔记(十五)——图像金字塔
参考文献目标学习图像金字塔 学习函数cv2.pyrUp()和cv2.pyrDown()原理 当我们需要将图像转换到另一个尺寸的时候, 有两种可能,一种是放大图像,另一种是缩小图像。尽管在Opencv几何变换中学到了resize()函数,不过使用图像金字塔来做图像缩放也是视觉运用中广泛应用的一项技术。 一般来说我们操作的图像是具有固定分辨率的,但是有些情况下,我们需要对同一图...翻译 2018-07-30 21:17:12 · 326 阅读 · 0 评论 -
Opencv笔记(十六)——认识轮廓
什么是轮廓? 轮廓可以简单认为成连续的点(连着边界)连在一起的曲线,具有相同的颜色或者灰度。轮廓在形状分析和物体的检测和识别中很有用。谈起轮廓不免想到边缘,它们确实很像。简单的说,轮廓是连续的,边缘并不全都连续(下图)。其实边缘主要是作为图像的特征使用,比如可以用边缘特征可以区分脸和手,而轮廓主要用来分析物体的形态,比如物体的周长和面积等,可以说边缘包括轮廓。为了准确,要使用二值化图...翻译 2018-08-01 08:55:47 · 905 阅读 · 0 评论 -
Opencv笔记(十七)——轮廓性质
边界矩形的宽高比x,y,w,h = cv2.boundingRect(cnt)aspect_ratio = float(w)/hExtentExtent就是轮廓面积与边界矩形面积的比。area = cv2.contourArea(cnt)x,y,w,h = cv2.boundingRect(cnt)rect_area = w*hextent = float(ar...翻译 2018-08-01 16:23:08 · 808 阅读 · 0 评论 -
Opencv笔记(二十一)——傅里叶变换
参考Numpy 中的傅里叶变换 首先我们看看如何使用 Numpy 进行傅里叶变换。Numpy 中的 FFT 包可以帮助我们实现快速傅里叶变换。函数 np.fft.fft2() 可以对信号进行频率转换,输出结果是一个复杂的数组。本函数的第一个参数是输入图像,要求是灰度格式。第二个参数是可选的, 决定输出数组的大小。输出数组的大小和输入图像大小一样。如果输出结果比输入图像大,输入图像就需...翻译 2018-08-06 09:59:59 · 3261 阅读 · 1 评论 -
Opencv笔记(十八)——轮廓的更多函数及其层次结构
凸缺陷 前面我们已经学习了轮廓的凸包,对象上的任何凹陷都被成为凸缺陷。OpenCV 中有一个函数 cv.convexityDefect() 可以帮助我们找到凸缺陷。函数调用如下:hull = cv2.convexHull(cnt,returnPoints = False)defects = cv2.convexityDefects(cnt,hull) cv2.convexity...翻译 2018-08-01 22:53:52 · 2150 阅读 · 0 评论 -
Opencv笔记(十九)——直方图(一)
直方图概念 图像的构成是有像素点构成的,每个像素点的值代表着该点的颜色(灰度图或者彩色图)。所谓直方图就是对图像的中的这些像素点的值进行统计,得到一个统一的整体的灰度概念。一般情况下直方图都是灰度图像,直方图x轴是灰度值(一般0~255),y轴就是图像中每一个灰度级对应的像素点的个数。直方图的好处就在于可以清晰了解图像的整体灰度分布,这对于后面依据直方图处理图像来说至关重要。统计直方图...翻译 2018-08-02 22:49:29 · 426 阅读 · 0 评论 -
python全局灰度线性变换——自由设定图像灰度范围
全局线性变换的公式是s = (r-a)*(d-c)/(b-a)+c,其中a、b是原图片的灰度最小值和最大值,c、d是变换后的灰度值的最小值和最大值。r是当前像素点的灰度值,s是当前像素点变换后的灰度值。该公式可自己画出一个坐标,利用相似三角形性质可轻易得出。所以只要我们得到一个图片的灰度范围,我们就可以自由变换到指定的灰度范围,这种灰度变换也是图像增强的一部分。下面的示例能清晰看出变换后的效果。除...原创 2018-10-14 13:17:47 · 5047 阅读 · 0 评论 -
Opencv笔记(二十)——直方图(二)
直方图均衡化原理: 想象一下如果一副图像中的大多是像素点的像素值都集中在一个像素值范围之内会怎样呢?例如,如果一幅图片整体很亮,那所有的像素值应该都会很高。但是一副高质量的图像的像素值分布应该很广泛。所以你应该把它的直方图做一个横向拉伸(如下图),这就是直方图均衡化要做的事情。通常情况下这种操作会改善图像的对比度。直方图均衡化后面潜在的数学原理是一个分布(输入的亮度直方图)被映射到另一...翻译 2018-08-04 21:03:27 · 382 阅读 · 0 评论 -
Opencv笔记(十四)——边缘检测算法canny
简介 Canny 边缘检测算法 是 John F. Canny 于 1986年开发出来的一个多级边缘检测算法,也被很多人认为是边缘检测的 最优算法,它是由很多步构成的算法。最优边缘检测的三个主要评价标准:低错误率: 标识出尽可能多的实际边缘,同时尽可能的减少噪声产生的误报。 高定位性: 标识出的边缘要与图像中的实际边缘尽可能接近。 最小响应: 图像中的边缘只能标识一次。算法过程...翻译 2018-07-30 09:47:50 · 2012 阅读 · 0 评论 -
Opencv笔记(一):图像的基本操作
1.图像的读、显示和保存操作import cv2img = cv2.imread('filename',0);cv2.imshow('name',img);k=cv2.waitKey(0);if k==27: cv2.destroyAllWindows();elif k==ord('s'): cv2.imwrite('filename',img); cv2.des...原创 2018-07-08 20:49:34 · 2340 阅读 · 0 评论 -
Opencv笔记(二):图像的基本操作——续写
1.图像的透视变换 对于视角变换,我们需要一个 3x3 变换矩阵。在变换前后直线还是直线。要构建这个变换矩阵,你需要在输入图像上找 4 个点,以及他们在输出图像上对应的位置。这四个点中的任意三个都不能共线。这个变换矩阵可以有函数 cv2.getPerspectiveTransform() 构建。然后把这个矩阵传给函数cv2.warpPerspective。import cv2imp...原创 2018-07-09 20:44:28 · 450 阅读 · 0 评论 -
Opencv笔记(三)——视频的获取及保存
一、利用摄像头获取视频 我们经常需要使用摄像头捕获实时图像。OpenCV 为这中应用提供了一个非常简单的接口。让我们使用摄像头来捕获一段视频,并把它转换成灰度视频显示出来。了获取视频,你应该创建一个 VideoCapture 对象。他的参数可以是设备的索引号,或者是一个视频文件。设备索引号就是在指定要使用的摄像头。一般的笔记本电脑都有内置摄像头。所以参数就是 0。你可以通过设置成 1...原创 2018-07-10 09:13:10 · 485 阅读 · 0 评论 -
Opencv笔记(四)——绘图函数
常用的绘图函数有:cv2.line() cv2.circle() cv2.rectangle() cv2.ellipse() cv2.putText()上面所有的这些绘图函数需要设置下面这些参数:• img:你想要绘制图形的那幅图像。• color:形状的颜色。以 RGB 为例,需要传入一个元组,例如:(255,0,0)代表蓝色。对于灰度图只需要传入...原创 2018-07-10 19:34:16 · 630 阅读 · 0 评论 -
Opencv笔记(五)——把鼠标当画笔
学习目标: 学习使用 OpenCV 处理鼠标事件学会使用函数cv2.setMouseCallback()简单演示: 首先我们来创建一个鼠标事件回调函数,但鼠标事件发生是他就会被执行。鼠标事件可以是鼠标上的任何动作,比如左键按下,左键松开,左键双击等。该函数还提供了鼠标点击的位置。Event中文释义cv2.EVENT_MOUSEMOVE鼠标移动cv2.EVENT_LBUTTONDOWN...原创 2018-07-11 10:47:44 · 1023 阅读 · 0 评论 -
Opencv笔记(六)——把滑动条当调色板
学习目标:学会把滑动条绑定到 OpenCV 的窗口。学习函数:cv2.getTrackbarPos(), cv2.creatTrackbar()等。简单演示: 通过调节滑动条来设定画板颜色。我们要创建一个窗口来显示显色,还有三个滑动条来设置 B,G,R 的颜色。当我们滑动滚动条是窗口的颜色也会发生相应改变。默认情况下窗口的起始颜色为黑。滑动条的另外一个重要应用就是用作转换按钮。默认情...原创 2018-07-11 18:53:52 · 622 阅读 · 0 评论 -
Opencv笔记(七)——访问与操作像素
一、获取矩阵的元素1、获取三维矩阵img[i,j]处的元素 (b,g,r) = image[i,j],image大小为:MxNxK。2、获取三维矩阵的子矩阵的全部元素 newimage = image[i:j,p:q],image大小为:MxNxK。二、获取图片的像素import numpy as npimport cv2img = cv2.imread('/hom...原创 2018-07-11 20:27:33 · 434 阅读 · 0 评论 -
Opencv笔记(八)——图像上的算数运算
学习目标:学习图像上的算术运算,加法,减法,位运算等。学习函数cv2.add(),cv2.addWeighted() 等。一、图像的加法 你可以使用函数 cv2.add() 将两幅图像进行加法运算,当然也可以直接使用 numpy,res=img1+img。两幅图像的大小,类型必须一致,或者第二个图像可以是一个简单的标量值。注意:OpenCV 中的加法与 Numpy 的加法是有所不同的...原创 2018-07-12 09:08:01 · 1076 阅读 · 0 评论 -
Opencv笔记(九)——图像阈值
学习目标:学习简单阈值,自适应阈值,Otsu’s 二值化等学习函数cv2.threshold,cv2.adaptiveThreshold 等。一、简单阈值 与名字一样,这种方法非常简单。但像素值高于阈值时,我们给这个像素赋予一个新值(可能是白色),否则我们给它赋予另外一种颜色(也许是黑色)。我们要用到的函数就是cv2.threshold,下面介绍他的参数。cv2.threshold(...原创 2018-07-12 20:08:25 · 768 阅读 · 0 评论 -
Opencv笔记(十)——卷积基础
卷积 什么是二维卷积呢?看下面一张图就一目了然: 卷积就是循环对图像跟一个核逐个元素相乘再求和得到另外一副图像的操作,比如结果图中第一个元素5是怎么算的呢?原图中3×3的区域与3×3的核逐个元素相乘再相加:1×1 + 2×0 + 1×0 + 0×0 + 1×0 + 1×0 + 3×0 + 0×0 + 2×2 = 5。算完之后,整个框再往右移一步继续计算,横向计算完后,再...翻译 2018-07-13 20:40:33 · 290 阅读 · 0 评论 -
Opencv笔记(十一)——图像模糊(平滑)
学习目标:使用自定义的滤波器对图像进行卷积(2D 卷积)学习使用不同的低通滤波器对图像进行模糊一、2D卷积 与语音信号一样,我们也可以对 2D 图像实施低通滤波(LPF),高通滤波(HPF)等。低通滤波器就是允许低频信号通过,在图像中边缘和噪点都相当于高频部分,所以低通滤波器用于去除噪点、平滑和模糊图像。高通滤波器则反之,用来增强图像边缘,进行锐化处理。...原创 2018-07-13 21:25:56 · 301 阅读 · 0 评论 -
Opencv笔记(十二)——形态学转换
学习目标:学习不同的形态学操作,例如腐蚀,膨胀,开运算,闭运算等我们要学习的函数有: cv2.erode(), cv2.dilate(), cv2.morphologyEx()等原理简介: 形态学操作是根据图像形状进行的简单操作。一般情况下对二值化图像进行的操作。需要输入两个参数,一个是原始图像,第二个被称为结构化元素或核,它是用来决定操作的性质的。两个基本的形态学操作是腐蚀和膨胀。...原创 2018-07-14 22:03:31 · 488 阅读 · 0 评论 -
Opencv笔记(十三)——图像的梯度
目标认识图像梯度、边界 学习函数cv2.Sobel(),cv2.Schar(),cv2.Laplacian()原理 图像梯度可以把图像看成二维离散函数,图像梯度其实就是这个二维离散函数的求导。OpenCV提供三种类型的梯度滤波器或高通滤波器,Sobel,Scharr和Laplacian.Sobel 和 Scharr 算子Sobel算子是结合了高斯平滑与微分运算的结合方法,所以...原创 2018-07-29 21:12:38 · 5098 阅读 · 0 评论 -
opencv---颜色空间转化并实现物体跟踪
一、图像处理的基本操作因为这是第一篇写opencv的笔记,故先讲讲在python下写opencv的基本操作。总共总结了三点如下:开头一定要加编码声明:-*- coding: utf-8 -*-python下记得引入opencv模块:import cv2要知道如何读取并展示图片,代码如下:# -*- coding: utf-8 -*-import cv2import numpy原创 2017-11-15 21:00:07 · 1072 阅读 · 0 评论