之前在进阶篇我们已经讨论过OpenCV的模板匹配,本次我们可以将其用于Credit Card数字识别,当然这是最简单的也是最直接的方法,后面我们也会介绍到OCR识别,但本次我们暂不涉及。
准备工作
argparse用法
使用argparse模块创建一个ArgumentParser解析对象,可以理解成一个容器,将包含将命令行解析为Python数据类型所需的所有信息。parse_args()是将之前add_argument()定义的参数进行赋值,并返回相关的namespace:
view plaincopy to clipboardprint?
import argparse
parser = argparse.ArgumentParser()
# # 括号少了会报错AttributeError: 'str' object has no attribute 'prefix_chars'
parser.add_argument("-i", "--image", required=True, help="path to input image")
# -i可以理解为标签,--image既可以是标签又是属性
parser.add_argument("-t", "--template", required=True, help="path to template OCR-A image")
args = vars(parser.parse_args()) # print(args["image"])
# args为字典{'image': 'images/credit_card_01.png', 'template': 'images/ocr_a_reference.png'}
args = parser.parse_args() # print(args.image)
# Namespace(image='images/credit_card_01.png', template='images/ocr_a_reference.png')
# -t 和 --train两种情况,在bat文件和pycharm配置种注意区分前面的两个--还是一个-
pycharm下可以通过argparse模块完成参数设置,即生成全局变量。
zip 与 zip*用法
zip() 函数用于将可迭代的对象作为参数,将对象中对应的元素打包成一个个元组,然后返回由这些元组组成的列表。
如果各个迭代器的元素个数不一致,则返回列表长度与最短的对象相同,利用 * 号操作符,可以将元组解压为列表。(个人理解,将两组元素,分别各成元元组组合成一个列表)
zip 方法在 Python 2 和 Python 3 中的不同:在 Python 3.x 中为了减少内存,zip()返回的是一个对象。如需展示列表,需手动 list() 转换。
sorted用法
基础用法:
传进去一个可迭代的数据,返回一个新的列表,按照从小到大排序,注意,是新的列表!
view plaincopy to clipboardprint?
a = [1, 4, 6, 8, 9, 3, 5]
b = "aghdb"
sorted(a) # print(a)不变,返回sorted(g)变; [1, 3, 4, 5, 6, 8, 9]
sorted(b) # 返回['a', 'b', 'd', 'g', 'h']
sorted(a, reverse=True) # 逆序排序; [9, 8, 6, 5, 4, 3, 1]
高级用法:
列表里面的每一个元素都为二维元组,key参数传入了一个lambda函数表达式,其x就代表列表里的每一个元素,然后分别利用索引返回元素内的第一个和第二个元素,这就代表了sorted()函数根据哪一个元素进行排列。reverse参数起逆排的作用,默认为False,从小到大顺序。
view plaincopy to clipboardprint?
c = [("a", 1), ("e", 2), ("c", 4)]
print(sorted(c, key=lambda x: x[0]))
print(sorted(c, key=lambda x: x[1]))
print(sorted(c, key=lambda x: x[0], reverse=True))
items()用法
D.items():
Python 字典 items() 方法,以列表形式返回可遍历的(键, 值) 元组数组,(并非直接的列表,若要返回列表值还需调用list函数)。
view plaincopy to clipboardprint?
D = {'Google': 'www.google.com', 'Runoob': 'www.runoob.com', 'taobao': 'www.taobao.com'}
print(D.items())
print(list(D.items()))
# 遍历字典列表
for key, value in D.items():
print(key, value)
# dict_items([('Google', 'www.google.com'), ('Runoob', 'www.runoob.com'), ('taobao', 'www.taobao.com')])
# [('Google', 'www.google.com'), ('Runoob', 'www.runoob.com'), ('taobao', 'www.taobao.com')]
# Google www.google.com Runoob www.runoob.com taobao www.taobao.com
join()用法
join()方法——用于将序列中的元素以指定的字符连接生成一个新的字符串
join()方法语法:str.join(sequence),sequence为要连接的元素序列。
view plaincopy to clipboardprint?
str = "-"
seq = ("a", "b", "c") # 字符串序列
# c = [1, 2, 3] 数字不行,变成# c = ["1", "2", "3"]
print(str.join(seq)) # 输出结果为a-b-c
# print("-".join(seq)) 直接这样写也行
# print(“”.join(seq)) 输出结果为abc
extend()用法
extend() 函数用于在列表末尾一次性追加另一个序列中的多个值(用新列表扩展原来的列表)。
extend()方法语法:list.extend(seq)
view plaincopy to clipboardprint?
a = [1, "a", "ad", "fd"]
b = ["d", "d", "d"]
a.extend(b) # 注意这个函数没有返回值,直接在a上面变化。
print(a)
a1 = []
a1.extend(a)
print(a1)
format用法
一种格式化字符串的函数 str.format()
format 函数可以接受不限个参数,位置可以不按顺序。
view plaincopy to clipboardprint?
print("hello:{}{}".format("111", "222"))
# hello:111222
print("hello:{1}{0}".format("111", "222"))
# hello:222111可以改变顺序
print("hello:{name},{age}".format(name="111", age="222"))
# hello:111,222可以设置参数
print("{:.2f}".format(3.123222)) # 3.12
接下来为OpenCV的准备工作,我们将其与实战部分放在一起。
查看文章汇总页https://blog.csdn.net/weixin_44237705/article/details/107864965
更多openvino技术信息可以入群交流~
申请备注:CSDN