以下图片可右击查看放大后查看左下角打印数据
二维码
1 import sensor, image 2 3 sensor.reset() 4 sensor.set_pixformat(sensor.RGB565) 5 sensor.set_framesize(sensor.QQVGA) # can be QVGA on M7... 6 sensor.skip_frames(30) 7 sensor.set_auto_gain(False) # must turn this off to prevent image washout... 8 while(True): 9 img = sensor.snapshot() 10 img.lens_corr(1.8) # strength of 1.8 is good for the 2.8mm lens. 11 for code in img.find_qrcodes(): 12 print(code)
image.
find_qrcodes
([roi])
查找 roi
内的所有二维码并返回一个 image.qrcode
对象的列表。 请参考 image.qrcode
对象以获取更多信息。
为使这一方法成功运行,图像上二维码需比较平展。因为openmv的镜头为鱼眼镜头可以通过物理镜头消除畸变影响,也可以通过使用 sensor.set_windowing
函数在镜头中心放大、image.lens_corr
函数来消解镜头的桶形畸变或通过更换视野较为狭小的镜头, 您可得到一个不受镜头畸变影响的更为平展的二维码。有些机器视觉镜头不会造成桶形失真,但是其造价远比OpenMV提供的标准镜片高,这种镜头为无畸变镜头。
roi
是一个用以复制的矩形的感兴趣区域(x, y, w, h)。如果未指定,ROI即整幅图像的图像矩形。 操作范围仅限于 roi
区域内的像素。
不支持压缩图像和bayer图像。
此方法在OpenMV Cam M4 上不可用。
qrcode.
corners
()-
返回一个由该对象的四个角组成的四个元组(x,y)的列表。四个角通常是按照从左上角开始沿顺时针顺序返回的。
qrcode.
rect
()-
返回一个矩形元组(x, y, w, h),用于如二维码的边界框的
image.draw_rectangle
等其他的image
方法。
qrcode.
x
()-
返回二维码的边界框的x坐标(int)。
您也可以通过索引
[0]
取得这个值。
qrcode.
y
()-
返回二维码的边界框的y坐标(int)。
您也可以通过索引
[1]
取得这个值。
qrcode.
w
()-
返回二维码的边界框的w坐标(int)。
您也可以通过索引
[2]
取得这个值。
qrcode.
h
()-
返回二维码的边界框的h坐标(int)。
您也可以通过索引
[3]
取得这个值。
qrcode.
payload
()-
返回二维码有效载荷的字符串,例如URL 。该示例中的内容为openmv
您也可以通过索引
[4]
取得这个值。
qrcode.
version
()-
返回二维码的版本号(int)。
您也可以通过索引
[5]
取得这个值。
qrcode.
ecc_level
()-
返回二维码的ECC水平(int)。
您也可以通过索引
[6]
取得这个值。
qrcode.
mask
()-
返回二维码的掩码(int)。
您也可以通过索引
[7]
取得这个值。
qrcode.
data_type
()-
返回二维码的数据类型。
您也可以通过索引
[8]
取得这个值。
qrcode.
eci
()-
返回二维码的ECI。ECI储存了QR码中存储数据字节的编码。若您想要处理包含超过标准ASCII文本的二维码,您需要查看这一数值。
您也可以通过索引
[9]
取得这个值。
qrcode.
is_numeric
()-
若二维码的数据类型为数字式,则返回True。
qrcode.
is_alphanumeric
()-
若二维码的数据类型为文字数字式,则返回True。
qrcode.
is_binary
()-
若二维码的数据类型为二进制式,则返回True。如果您认真处理所有类型的文本,则需要检查eci是否为True,以确定数据的文本编码。通常它只是标准的ASCII,但是它也可能是有两个字节字符的UTF8。
qrcode.
is_kanji
()-
若二维码的数据类型为日本汉字,则返回True。设置为True后,您就需要自行解码字符串,因为日本汉字符号每个字符是10位,而MicroPython不支持解析这类文本
条形码
1 import sensor, image, time, math 2 3 sensor.reset() 4 sensor.set_pixformat(sensor.GRAYSCALE) 5 sensor.set_framesize(sensor.VGA) # High Res! 6 sensor.set_windowing((640, 80)) # V Res of 80 == less work (40 for 2X the speed). 7 sensor.skip_frames(30) 8 sensor.set_auto_gain(False) # must turn this off to prevent image washout... 9 sensor.set_auto_whitebal(False) # must turn this off to prevent image washout... 10 clock = time.clock() 11 12 # Barcode detection can run at the full 640x480 resolution of your OpenMV Cam's 13 # OV7725 camera module. Barcode detection will also work in RGB565 mode but at 14 # a lower resolution. That said, barcode detection requires a higher resolution 15 # to work well so it should always be run at 640x480 in grayscale... 16 17 def barcode_name(code): 18 if(code.type() == image.EAN2): 19 return "EAN2" 20 if(code.type() == image.EAN5): 21 return "EAN5" 22 if(code.type() == image.EAN8): 23 return "EAN8" 24 if(code.type() == image.UPCE): 25 return "UPCE" 26 if(code.type() == image.ISBN10): 27 return "ISBN10" 28 if(code.type() == image.UPCA): 29 return "UPCA" 30 if(code.type() == image.EAN13): 31 return "EAN13" 32 if(code.type() == image.ISBN13): 33 return "ISBN13" 34 if(code.type() == image.I25): 35 return "I25" 36 if(code.type() == image.DATABAR): 37 return "DATABAR" 38 if(code.type() == image.DATABAR_EXP): 39 return "DATABAR_EXP" 40 if(code.type() == image.CODABAR): 41 return "CODABAR" 42 if(code.type() == image.CODE39): 43 return "CODE39" 44 if(code.type() == image.PDF417): 45 return "PDF417" 46 if(code.type() == image.CODE93): 47 return "CODE93" 48 if(code.type() == image.CODE128): 49 return "CODE128" 50 51 while(True): 52 clock.tick() 53 img = sensor.snapshot() 54 codes = img.find_barcodes() 55 for code in codes: 56 img.draw_rectangle(code.rect()) 57 print_args = (barcode_name(code), code.payload(), (180 * code.rotation()) / math.pi, code.quality(), clock.fps()) 58 print("Barcode %s, Payload \"%s\", rotation %f (degrees), quality %d, FPS %f" % print_args) 59 if not codes: 60 print("FPS %f" % clock.fps())
barcode.
corners
()-
返回一个由该对象的四个角组成的四个元组(x,y)的列表。四个角通常是按照从左上角开始沿顺时针顺序返回的。
barcode.
rect
()-
返回一个矩形元组(x, y, w, h),用于如数据矩阵的边界框的
image.draw_rectangle
等其他的image
方法。
barcode.
x
()-
返回条形码的边界框的x坐标(int)。
您也可以通过索引
[0]
取得这个值。
barcode.
y
()-
返回条形码的边界框的y坐标(int)。
您也可以通过索引
[1]
取得这个值。
barcode.
w
()-
返回条形码的边界框的w宽度(int)。
您也可以通过索引
[2]
取得这个值。
barcode.
h
()-
返回条形码的边界框的h高度(int)。
您也可以通过索引
[3]
取得这个值。
barcode.
payload
()-
返回条形码的有效载荷的字符串。例:数量。
您也可以通过索引
[4]
取得这个值。
barcode.
type
()-
返回条形码的列举类型 (int)。
您也可以通过索引
[5]
取得这个值。- image.EAN2
- image.EAN5
- image.EAN8
- image.UPCE
- image.ISBN10
- image.UPCA
- image.EAN13
- image.ISBN13
- image.I25
- image.DATABAR
- image.DATABAR_EXP
- image.CODABAR
- image.CODE39
- image.PDF417 - 未来启用 (e.g. 现在还不能正常使用).
- image.CODE93
- image.CODE128
barcode.
rotation
()-
返回以弧度计的条形码的旋度(浮点数)。
您也可以通过索引
[6]
取得这个值。
barcode.
quality
()-
返回条形码在图像中被检测到的次数(int)。
扫描条形码时,每一条新的扫描线都能解码相同的条形码。每次进行这一过程,条形码的值都会随之增加。
您也可以通过索引
[7]
取得这个值。
来源:https://www.cnblogs.com/miaorn/p/12242788.html