520886中国版免费:解锁爱的数字密码,让真情触手可及

核心内容摘要

穿越次元壁垒,解锁“小黄书”的奇幻真相
正能量不良网站免费下载引领网络新风尚,探索积极能量

大雷露牛奶:一口润喉,唤醒舌尖上的奇妙旅程

简介计算机视觉系列第一课opencv语法(

保姆级教学计算机视觉系列第一课opencv语法(

保姆级教学计算机视觉系列第一课opencv语法(

保姆级教学[计算机视觉第一课opencv(

保姆级教学][opencv 3]关于计算机视觉的基础内容我们之前已经说完了,今天我们就来用一个小案例来回顾并丰富一下我们的知识。

整体流程预处理模板图像,提取数字模板预处理信用卡图像,定位数字区域对每个数字区域进行处理,提取单个数字使用模板匹配识别每个数字输出识别结果card.pngtemplate.png这是数字模板,就是把银行卡号与这里面每一个数字对比实现模糊匹配

代码分析

导入工具包和参数设置# 导入工具包importnumpyasnp# 用于数值计算和数组操作importargparse# 用于解析命令行参数importcv2# OpenCV库,用于图像处理importmyutils# 自定义工具函数,包含图像 resize、轮廓排序等功能argparse用于解析命令行参数,允许用户通过命令行指定输入图像和模板图像:# 设置命令行参数# 创建 ArgumentParser 对象,用于定义和解析命令行参数ap=argparse.ArgumentParser()# 添加输入图像参数ap.add_argument("-i","--image",required=True,help="path to input image")# 输入信用卡图片的路径# 添加模板图像参数ap.add_argument("-t","--template",required=True,help="path to template OCR-A image")# 数字模板图片的路径# 解析参数并转换为字典形式args=vars(ap.parse_args())定义信用卡类型映射表,根据卡号第一位判断:FIRST_NUMBER={"3":"American Express","4":"Visa","5":"MasterCard","6":"Discover Card"}辅助函数cv_show用于显示图像:defcv_show(name,img):cv

imshow(name,img)cv

waitKey(

# 等待按键,0表示无限等待myutils.pyimportcv2defsort_contours(cnts,method='left-to-right'):reverse=Falsei=0ifmethod=='right-to-left'ormethod=='bottom-to-top':reverse=Trueifmethod=='top-to-bottom'ormethod=='bottom-to-top':i=1boundingBoxes=[cv

boundingRect(c)forcincnts](cnts,boundingBoxes)=zip(*sorted(zip(cnts,boundingBoxes),key=lambdab:b[1][i],reverse=reverse))# zip(*...) 使用星号操作符解包排序后的元组列表,并将其重新组合成两个列表:一个包含所有轮廓,另一个包含所有边界框。

returncnts,boundingBoxesdefresize(image,width=None,height=None,inter=cv

INTER_AREA):dim=None(h,w)=image.shape[:2]ifwidthisNoneandheightisNone:returnimageifwidthisNone:r=height/float(h)dim=(int(w*r),height)else:r=width/float(w)dim=(width,int(h*r))resized=cv

resize(image,dim,interpolation=inter)#默认是cv

INTER_AREA,即面积插值,适用于缩放图像returnresized这里定义了两个函数方法:sort_contours函数:轮廓排序这个函数的作用是按照指定的方式对图像中的轮廓进行排序,方便后续的图像处理和分析。

参数说明:cnts:需要排序的轮廓列表(通常来自cv

findContours的返回值)method:排序方法,可选值包括:‘left-to-right’(默认):从左到右排序‘right-to-left’:从右到左排序‘top-to-bottom’:从上到下排序‘bottom-to-top’:从下到上排序工作原理:首先根据排序方法设置reverse(是否反转排序结果)和i(排序依据的坐标索引):对于水平方向排序(左右),使用 x 坐标(索引

对于垂直方向排序(上下),使用 y 坐标(索引

反向排序(如 right-to-left)时设置reverse=TrueboundingBoxes = [cv

boundingRect(c) for c in cnts]:为每个轮廓计算边界框(外接矩形)cv

boundingRect(c)返回一个元组(x, y, w, h),其中 (x,y) 是矩形左上角坐标,w 和 h 是宽和高排序部分:zip(cnts, boundingBoxes)将轮廓与其对应的边界框组合成元组sorted(..., key=lambda b: b[1][i], reverse=reverse)根据边界框的指定坐标(x 或 y)进行排序zip(*...)解包排序后的结果,重新组合成轮廓列表和边界框列表返回排序后的轮廓和对应的边界框resize函数:图像缩放这个函数用于按比例调整图像的尺寸,可以指定宽度或高度,保持原图的宽高比。

参数说明:image:输入图像width:目标宽度(可选)height:目标高度(可选)inter:插值方法,默认为cv

INTER_AREA(面积插值)工作原理:首先获取原图的高度和宽度:(h, w) = image.shape[:2]处理特殊情况:如果宽度和高度都未指定,直接返回原图如果只指定高度,则计算高度的缩放比例r = height / float(h),再计算对应的宽度如果只指定宽度,则计算宽度的缩放比例r = width / float(w),再计算对应的高度执行缩放:cv

resize(image, dim, interpolation=inter)使用计算出的目标尺寸dim进行缩放默认使用cv

INTER_AREA插值方法,这种方法在缩小图像时效果较好,能保持图像质量返回缩放后的图像使用场景sort_contours常用于需要按顺序处理轮廓的场景,如识别数字、字符时按阅读顺序排列resize是预处理的常用步骤,用于统一图像尺寸,方便后续处理或显示

模板图像处理(创建数字模板库)这部分的目的是从模板图像中提取

的数字特征,建立模板库:# 读取模板图像img=cv

imread(args["template"])cv_show('img',img)# 转换为灰度图ref=cv

cvtColor(img,cv

COLOR_BGR2GRAY)cv_show('ref',ref)# 转换为二值图像(黑底白字)ref

一级少女免费高清电视剧2-一级少女免费高清电视剧应用

百度百家号客服电话人工服务

123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123