opencv笔记
文章平均质量分 79
落雪wink
这个人除了菜 什么也没留下
展开
-
opencv学习二十四:数字验证码识别案例
windows 10环境下安装Tesseract-OCR与python集成我的环境win10+python3.7 +opencv3.4前言Tesseract是一个开源的ocr引擎,可以开箱即用,项目最初由惠普实验室支持,1996年被移植到Windows上,1998年进行了C++化。在2005年Tesseract由惠普公司宣布开源。2006年到现在,都由Google公司开发。官网宣传目前支持100多种语言的识别,根据我的测试,目前感觉其对机器打印的比较规整的英语,或者阿拉伯数字的识别准确率还是挺高的,原创 2021-01-20 08:44:39 · 779 阅读 · 2 评论 -
opencv学习二十三:人脸检测
人脸检测OpenCV自带了函数detectMultiScale()可以实现对行人和人脸的检测,实现简单,但识别效果相对较差。Opencv的人脸检测函数,定义了具体可跟踪对象类型的数据文件。Haar级联分类器,通过对比分析相邻图像区域来判断给定图像或子图像与已知对象是否匹配。两个图像的相似程度可以通过它们对应特征的欧式距离来度量。距离可能以空间坐标或颜色坐标来定义。类Haar特征是一种用于实现实时人脸跟踪的特征。每个类Haar特征都描述了相邻图像区域的对比模式。例如,边,顶点和细线都能生成具有判断性的原创 2021-01-19 21:10:01 · 1178 阅读 · 10 评论 -
opencv学习二十二:分水岭算法
使用分水岭算法进行图像分割 (一)获取灰度图像,二值化图像,进行形态学操作,消除噪点 (二)在距离变换前加上一步操作:通过对上面形态学去噪点后的图像,进行膨胀操作,可以得到大部分都是背景的区域(原黑色不是我们需要的部分是背景) (三)使用距离变换distanceTransform获取确定的前景色相关知识补充(重点) (四)在获取了背景区域和前景区域(其实前景区域是我们的种子,我们将从这里进行灌水,向四周涨原创 2021-01-19 15:52:52 · 711 阅读 · 0 评论 -
opencv学习二十一:顶帽、黑帽、形态学梯度
一、顶帽TOPHAT又称礼帽,是原始图像与进行开运算之后得到的图像的差。礼帽图像=原始图像-开运算图像得到噪声图像开运算:先腐蚀再膨胀使用方法:morphologyExcv2.MORPH_TOPHAT结果=cv2.morphologyEx(原始图像,cv2.MORPH_TOPHAT,卷积核)卷积核示例:k=np.ones((10,10),np.uint8)代码如下:import cv2 as cvimport numpy as npdef top_hat_demo(image):.原创 2021-01-19 10:26:22 · 601 阅读 · 0 评论 -
opencv学习二十:开闭操作与水平或垂直线的提取
一、开运算开运算:对图像先进行腐蚀,然后对腐蚀后的图进行膨胀开操作=腐蚀+膨胀主要应用在二值图像,灰度 图像也可以。可以消除背景噪声morphologyEx运算结果=cv2.morphologyEx(源图像img,cv2.MORPH_OPEN,卷积核k)cv2.MORPH_OPEN:开运算import cv2 as cvimport numpy as npdef open_demo(image): print(image.shape) gray = cv.cvtCol原创 2021-01-19 09:10:00 · 734 阅读 · 1 评论 -
opencv学习十九:膨胀与腐蚀
膨胀一:膨胀实现dilate使用方法:dilate结果=cv2.dilate(二值图像src,卷积核k,迭代次数itreations)卷积核 正方形数组:如np.ones((5,5),np.uint8)import cv2 as cvimport numpy as npdef dilate_demo(image): #膨胀 print(image.shape) gray = cv.cvtColor(image,cv.COLOR_BGR2GRAY) ret,bina原创 2021-01-19 07:30:45 · 1361 阅读 · 0 评论 -
opencv学习十八:对象测量
对象测量opencv 中轮廓特征包括:如面积,周长,质心,边界框等。多边形拟合API获取轮廓的多边形拟合结果python-opencv API提供方法:cv2.moments()用来计算图像中的中心矩(最高到三阶),cv2.HuMoments()用于由中心矩计算Hu矩,同时配合函数cv2.contourArea()函数计算轮廓面积和cv2.arcLength()来计算轮廓或曲线长度cv2.approxPolyDP(contour,epsilon,close)参数:contour 轮廓原创 2021-01-18 20:55:40 · 1050 阅读 · 0 评论 -
opencv学习十七:轮廓发现
轮廓发现当通过阈值分割提取到图像中的目标物体后,就需要通过边缘检测来提取目标物体的轮廓,使用这两种方法基本能够确定物体的边缘或者前景。接下来,通常需要做的是拟合这些边缘的前景,如拟合出包含前景或者边缘像素点的最小外包矩形、圆、凸包等几何形状,为计算它们的面积或者模板匹配等操作打下坚实的基础。一个轮廓代表一系列的点(像素),这一系列的点构成一个有序的点集,所以可以把一个轮廓理解为一个有序的点集。轮廓发现是基于图像边缘提取的基础,寻找对象轮廓的方法,所以边缘提取的阈值选定会影响最终轮廓的发现轮廓发现A原创 2021-01-18 18:02:20 · 314 阅读 · 1 评论 -
opencv学习十六:圆检测
圆检测原理圆周上任意三点所确定的圆,经Hough变换后在三维参数空间应对应一点。遍历圆周上所有点,任意三个点所确定的候选圆进行投票。遍历结束后,得票数最高点(理论上圆周上任意三点确定的圆在Hough变换后均对应三维参数空间中的同一点)所确定的圆 即为该圆周上,绝大多数点所确定的圆(以下称为当选圆),即绝大多数点均在该当选圆的圆周上,以此确定该圆。圆形的表达式为(x−xcenter)2+(y−ycenter)2=r2(x−xcenter)2+(y−ycenter)2=r2,一个圆环的确定需要三个参数。原创 2021-01-18 14:10:38 · 6188 阅读 · 0 评论 -
opencv学习十五:直线检测
直线检测原理介绍:1、对于直角坐标系中的任意一点A(x0,y0),经过点A的直线满足Y0=k*X0+b.(k是斜率,b是截距)2、那么在X-Y平面过点A(x0,y0)的直线簇可以用Y0=k*X0+b表示,但对于垂直于X轴的直线斜率是无穷大的则无法表示。因此将直角坐标系转换到极坐标系就能解决该特殊情况。3、在极坐标系中表示直线的方程为ρ=xCosθ+ySinθ(ρ为原点到直线的距离),如图所示:变换图示霍夫直线检测的两种方法1.获取灰度图像2.canny边缘检测3.获取霍夫直线信息4.算原创 2021-01-18 11:29:34 · 2248 阅读 · 0 评论 -
opencv学习十四:Canny边缘检测算法
Canny边缘检测cannny算法介绍非极大值抑制:在获得梯度和方向,去除所有不是边界的点。实现方向:逐渐遍历像素点,判断当前像素点是否是周围像素点中具有相同方向梯度的最大值。是保留,不是则为0.cannny代码实现edges=cv2.Canny(image,threshold1,threshold2)edges:处理结果image:原始图像threshold1:minValthreshold2:maxVal如果想让边界细节更多,则把threshold1和threshold2设小些。原创 2021-01-18 10:35:44 · 806 阅读 · 6 评论 -
opencv学习十三:图像金字塔和图像梯度
一、尺度调整 顾名思义,即对源图像的尺寸进行放大或者缩小变换。在opencv里面可以用resize函数,将源图像精准地转化为指定尺寸的目标图像。要缩小图像,一般推荐使用CV_INETR_AREA(区域插值)来插值;若要放大图像,推荐使用CV_INTER_LINEAR(线性插值)。这个函数可以用来做简单的图像尺度变换。而下面要说的图像金字塔的用处很大,在特征检测中都是基础理论和技术;Opencv里面的API介绍:void resize(src,dst,size,int interpolation)原创 2021-01-18 09:31:21 · 737 阅读 · 0 评论 -
opencv学习十二:超大图像二值化
超大图像的二值化方法分块处理超大图像的二值化问题 (1) 全局阈值处理 (2) 局部阈值(效果更好)空白区域过滤先缩放进行二值化,然后还原大小分块处理超大图像的二值化问题import cv2 as cvimport numpy as npdef big_image_binary(image): print(image.shape) #图像大小 ch, cw = 255, 255 #每个小块的大小 h, w = image.shape[:2] gra原创 2021-01-12 18:13:17 · 365 阅读 · 0 评论 -
opencv学习十一:图像二值化
彩色图像:三个通道0-255,0-255,0-255,所以可以有2^24位空间 灰度图像:一个通道0-255,所以有256种颜色 二值图像:只有两种颜色,黑和白,1白色,0黑色图像二值化实现1.全局阈值通常情况,我们一般不知道设定怎样的阈值thresh才能得到比较好的二值化效果,只能去试。如对于一幅双峰图像(理解为图像直方图中存在两个峰),我们指定的阈值应尽量在两个峰之间的峰谷。这时,就可以用第四个参数THRESH_OTSU,它对一幅双峰图像自动根据其直方图计算出合适的阈值(对于非双峰图,这种方法原创 2021-01-12 11:22:50 · 2541 阅读 · 0 评论 -
opencv学习十:模板匹配
模板匹配原理模板匹配是在一幅图像中寻找一个特定目标的方法之一,这种方法的原理非常简单,遍历图像中的每一个可能的位置,比较各处与模板是否“相似”,当相似度足够高时,就认为找到了我们的目标。其实模板匹配实现的思想也是很简单很暴力的,就是拿着模板图片在原图中从左上至右下依次滑动,直到遇到某个区域的相似度低于我们设定的阈值,那么我们就认为该区域与模板匹配了,也就是我们找到了要找的的位置,并把它标记出来。用T表示模板图像,I表示待匹配图像,切模板图像的宽为w高为h,用R表示匹配结果,匹配过程如下图所示:Op原创 2021-01-12 08:51:05 · 1218 阅读 · 0 评论 -
opencv学习九:图像直方图、直方图应用、直方图反向投影
1、图像直方图1.1 numpy实现函数:hist(数据源,像素级)数据源:图像,必须是一维数组像素级:一般是256,指[0-255]np.raval()可以实现多维数组转一维。import cv2 as cvimport numpy as npfrom matplotlib import pyplot as pltdef plot_demo(image): plt.hist(image.ravel(),256,[0,256])# image.ravel()将图像展开,256为b原创 2021-01-11 20:35:18 · 540 阅读 · 0 评论 -
opencv学习八:高斯模糊和边缘保留滤波EPF
1、高斯模糊1.1 numpy 实现高斯模糊代码如下:import cv2 as cvimport numpy as np#截断函数def clamp(pv): if pv > 255: return 255 else: return pv#高斯滤波 def gaussian_noise(image): h, w, c = image.shape for row in range(h): for col原创 2021-01-11 13:51:59 · 958 阅读 · 0 评论 -
opencv学习七:利用卷积对图像模糊处理
模糊操作方法:均值模糊,中值模糊,自定义模糊模糊原理:基于离散卷积,不同的卷积得到不同的卷积效果,模糊是卷积的表象。卷积原理:(2乘1+3乘以1+6乘以1)除以3=3边缘2和1未被卷积保留边缘不参与卷积直接保留。这个应该是均值模糊参考博客:OpenCV—模糊操作1.均值模糊:代码如下:import cv2 as cvimport numpy as np#均值模糊:去除随机噪声def blur_demo(image): dst = cv.blur(image, (5, 5原创 2021-01-11 11:01:38 · 1719 阅读 · 0 评论 -
opencv学习六:ROI与泛洪填充
什么是ROI:ROI(region of interest),也就是感兴趣区域,如果你设置了图像了ROI,那么在使用OpenCV的函数的时候,会只对ROI区域操作,其他区域忽略一、图片切割与合并原理通过操作图像矩阵来获取或合并指定位置的图像代码如下:import cv2 as cvimport numpy as npsrc = cv.imread("C:/Users/lenovo/Desktop/opencv/daima/banknum/template-matching-ocr/image原创 2021-01-10 21:21:31 · 518 阅读 · 0 评论 -
opencv学习五:图片像素运算--数值运算和逻辑运算
像素运算一、算数运算1.1 加减乘除opencv自带图片色素的处理函数:相加:add()相减:subtract()相乘:multiply()相除:divide()原理就是:通过获取两张(一次只能是两张)个图片的同一个位置的色素值来实现运算。运算的要求:两张图片的shape要一样。例图:代码:import cv2 as cv #导入cv模块import numpy as np #np科学计数的包,通过numpy对数据进行处理def add_demo(m1, m2):原创 2021-01-10 13:11:22 · 915 阅读 · 2 评论 -
opencv学习四:色彩空间转换
一、常见的色彩空间RGB颜色空间RGB(red,green,blue)颜色空间最常用的用途就是显示器系统,彩色阴极射线管,彩色光栅图形的显示器 都使用R、G、B数值来驱动R、G、B 电子枪发射电子,并分别激发荧光屏上的R、G、B三种颜色的荧光粉 发出不同亮度的光线,并通过相加混合产生各种颜色;扫描仪也是通过吸收原稿经反射或透射而发送来 的光线中的R、G、B成分,并用它来表示原稿的颜色。RGB色彩空间称为与设备相关的色彩空间,因为不同 的扫描仪扫描同一幅图像,会得到不同色彩的图像数据;不同型号的显示器显示原创 2021-01-10 09:11:42 · 1078 阅读 · 2 评论 -
opencv学习三:numpy数组操作
一、读取一张图片,修改颜色通道后输出可以得到图像的:行数,列数,通道数的矩阵,对矩阵进行操作可改变图像像素代码如下:import cv2 as cv #导入cv模块import numpy as np #np科学计数的包,通过numpy对数据进行处理def access_pixels(image): print(image.shape) height = image.shape[0] #图像的第一维度 高度 width = image.shape[1] #图像的第二维度原创 2021-01-09 22:48:27 · 817 阅读 · 0 评论 -
opencv学习二(附):读视频的图像
上次我们学了图像的加载与保存,那么我们想通过摄像头按帧获取图像可以吗,当然!打开摄像头,获取图像代码如下:import cv2 as cv #导入cv模块import numpy as np #np科学计数的包,通过numpy对数据进行处理def video_demo(): capture = cv.VideoCapture(0) #打开和电脑上连接的相机 while(True): ret,frame = capture.read() #ret是返回值,fra原创 2021-01-09 20:57:06 · 984 阅读 · 4 评论 -
opencv学习二:图像加载与保存
pycharm里创建一个工程,新建一个.py文件读取图像:mport cv2 as cv #导入cv模块src = cv.imread("C:/Users/lenovo/Desktop/opencv/daima/banknum/template-matching-ocr/images/ocr_a_reference.png") #读取图片位置cv.namedWindow("input image" ,cv.WINDOW_AUTOSIZE) #创建一个GUIcv.imshow("input i原创 2021-01-09 20:30:09 · 306 阅读 · 0 评论 -
opencv学习一:概述与环境搭建(python3.7+pycharm)
我用的环境是python3.7+opencv3.4+pycharm安装numpy库NumPy是Python语言的一个扩展程序库。支持高阶大量的维度数组和矩阵运算,此外也针对数组运算提供大量的数学函数库。注:OpenCV需要用到NumPy库。pip install numpy安装opencv pip install opencv-python扩展模块的安装pip install opencv-contrib-python安装pytesseract(后面做验证码识别要用到这个,它是goo原创 2021-01-09 19:50:20 · 480 阅读 · 15 评论