OpenMV识别复杂对象

1.二维码

创建二维码对象

二维码对象是由 image.find_qrcodes 返回的。

classimage.qrcode

请调用 image.find_qrcodes() 函数来创建此对象。

获取二维码的相关坐标

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 。

您也可以通过索引 [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不支持解析这类文本。

2.条形码

创建条形码对象

条形码对象是由 image.find_barcodes 返回的。

classimage.barcode

请调用 image.find_barcodes() 函数来创建此对象。

获取条形码坐标

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] 取得这个值。

3.AprilTag类 – AprilTag对象

创建AprilTag对象

AprilTag对象是由 image.find_apriltags 返回的。

classimage.apriltag

请调用 image.find_apriltags() 函数来创建此对象。

获取AprilTag对象坐标

apriltag.corners()

返回一个由该对象的四个角组成的四个元组(x,y)的列表。四个角通常是按照从左上角开始沿顺时针顺序返回的。

apriltag.rect()

返回一个矩形元组(x, y, w, h),用于如AprilTag边界框的 image.draw_rectangle 等其他的 image 方法。

apriltag.x()

返回AprilTag边界框的x坐标(int)。

您也可以通过索引 [0] 取得这个值。

apriltag.y()

返回AprilTag边界框的y坐标(int)。

您也可以通过索引 [1] 取得这个值。

apriltag.w()

返回AprilTag边界框的w坐标(int)。

您也可以通过索引 [2] 取得这个值。

apriltag.h()

返回AprilTag边界框的h坐标(int)。

您也可以通过索引 [3] 取得这个值。

apriltag.cx()

返回AprilTag的中心x位置(int)。

您也可以通过索引 [6] 取得这个值。

apriltag.cy()

返回AprilTag的中心y位置(int)。

您也可以通过索引 [7] 取得这个值。

apriltag.id()

返回AprilTag的数字ID。

  • TAG16H5 -> 0 to 29

  • TAG25H7 -> 0 to 241

  • TAG25H9 -> 0 to 34

  • TAG36H10 -> 0 to 2319

  • TAG36H11 -> 0 to 586

  • ARTOOLKIT -> 0 to 511

您也可以通过索引 [4] 取得这个值。

apriltag.family()

返回AprilTag的数字家庭。

  • image.TAG16H5

  • image.TAG25H7

  • image.TAG25H9

  • image.TAG36H10

  • image.TAG36H11

  • image.ARTOOLKIT

您也可以通过索引 [5] 取得这个值。

apriltag.rotation()

返回以弧度计的AprilTag的旋度(int)。

您也可以通过索引 [8] 取得这个值。

apriltag.decision_margin()

返回AprilTag匹配的色饱和度(取值0.0 - 1.0),其中1.0为最佳。

您也可以通过索引 [9] 取得这个值。

apriltag.hamming()

返回AprilTag的可接受的数位误差数值。

  • TAG16H5 -> 最多可接受0位错误

  • TAG25H7 -> 最多可接受1位错误

  • TAG25H9 -> 最多可接受3位错误

  • TAG36H10 -> 最多可接受3位错误

  • TAG36H11 -> 最多可接受4位错误

  • ARTOOLKIT -> 最多可接受0位错误

您也可以通过索引 [10] 取得这个值。

apriltag.goodness()

返回AprilTag图像的色饱和度(取值0.0 - 1.0),其中1.0为最佳。

备注

目前这一数值通常是0.0。未来我们可以启用一个称为“标签细化”的功能,以实现对更小的AprilTag的检测。然而,现在这个功能将帧速率降低到1 FPS以下。

您也可以通过索引 [11] 取得这个值。

apriltag.x_translation()

返回距离摄像机x方向的变换,距离的单位未知。

这个方法对于确定远离摄像机的AprilTag的位置很有用。但是,AprilTag的大小以及您使用的镜头等因素都会影响X单元归属的确定。为使用方便,我们推荐您使用查找表将该方法的输出转换为对您的应用程序有用的信息。

注意:此处的方向为从左至右。

您也可以通过索引 [12] 取得这个值。

apriltag.y_translation()

返回距离摄像机y方向的变换,距离的单位未知。

这个方法对于确定远离摄像机的AprilTag的位置很有用。但是,AprilTag的大小以及您使用的镜头等因素都会影响Y单元归属的确定。为使用方便,我们推荐您使用查找表将该方法的输出转换为对您的应用程序有用的信息。

注意:此处的方向为从上至下。

您也可以通过索引 [13] 取得这个值。

apriltag.z_translation()

返回距离摄像机z方向的变换,距离的单位未知。

T这个方法对于确定远离摄像机的AprilTag的位置很有用。但是,AprilTag的大小以及您使用的镜头等因素都会影响Z单元归属的确定。为使用方便,我们推荐您使用查找表将该方法的输出转换为对您的应用程序有用的信息。

注意:此处的方向为从前至后。

您也可以通过索引 [14] 取得这个值。

apriltag.x_rotation()

返回以弧度计的AprilTag在X平面上的旋度。例:目视AprilTag,从左至右移动摄像头。

您也可以通过索引 [15] 取得这个值。

apriltag.y_rotation()

返回以弧度计的AprilTag在Y平面上的旋度。例:目视AprilTag,从上至下移动摄像头。

您也可以通过索引 [16] 取得这个值。

apriltag.z_rotation()

返回以弧度计的AprilTag在Z平面上的旋度。例:目视AprilTag,旋转摄像头。

注意:这只是 apriltag.rotation() 的重命名版本。

您也可以通过索引 [17] 取得这个值。

4.Displacement类 – 位移对象

创建位移对象

位移对象由 image.find_displacement 返回。

classimage.displacement

请调用 image.find_displacement() 函数来创建此对象。

获取平移方向像素点

displacement.x_translation()

返回两个图像之间的x平移像素。 这是精确的子像素,所以它是一个浮点数。

您也可以通过索引 [0] 取得这个值。

displacement.y_translation()

返回两个图像之间的y平移像素。 这是精确的子像素,所以它是一个浮点数。

您也可以通过索引 [1] 取得这个值。

displacement.rotation()

返回两个图像之间的z平移像素。 这是精确的子像素,所以它是一个浮点数。

您也可以通过索引 [2] 取得这个值。

displacement.scale(

返回两个图像之间旋转的弧度。

您也可以通过索引 [3] 取得这个值。

displacement.response()

返回两幅图像之间位移匹配结果的质量。 范围 0-1。响应小于0.1的 displacement 对象可能是噪声。

您也可以通过索引 [4] 取得这个值。

5.统计数据对象

5.1ROI感兴趣的区域


roi的格式是(x, y, w, h)的tupple.

  • x:ROI区域中左上角的x坐标
  • y:ROI区域中左上角的y坐标
  • w:ROI的宽度
  • h:ROI的高度

5.2class Statistics – 统计数据对象

统计数据对象是由 histogram.get_statistics 或 image.get_statistics 返回的。

灰度统计数据有一个通道,使用非 l_* 、 a_* 或 b_* 方法。

RGB565百分比值有三个通道。使用 l_* 、 a_* 和 b_* 方法。

创建统计对象

classimage.statistics

请调用 histogram.get_statistics() 或 image.get_statistics() 函数来创建此对象。

灰度对象

statistics.mean()

返回灰度均值(0-255) (int)。

您也可以通过索引 [0] 取得这个值。

statistics.median()

返回灰度中值(0-255) (int)。

您也可以通过索引 [1] 取得这个值。

statistics.mode()

返回灰度众值(0-255) (int)。

您也可以通过索引 [2] 取得这个值。

statistics.stdev()

返回灰度标准差(0-255) (int)。

您也可以通过索引 [3] 取得这个值。

statistics.min()

返回灰度最小值(0-255) (int)。

您也可以通过索引 [4] 取得这个值。

statistics.max()

返回灰度最大值(0-255) (int)。

您也可以通过索引 [5] 取得这个值。

statistics.lq()

返回灰度下四分值(0-255) (int)。

您也可以通过索引 [6] 取得这个值。

statistics.uq()

返回灰度上四分值(0-255) (int)。

您也可以通过索引 [7] 取得这个值。

RGB对象

RGB中L相关

statistics.l_mean()

返回RGB5656 LAB 中L的均值(0-255) (int)。

您也可以通过索引 [0] 取得这个值。

statistics.l_median()

返回RGB5656 LAB 中L的中值(0-255) (int)。

您也可以通过索引 [1] 取得这个值。

statistics.l_mode()

返回RGB5656 LAB 中L的众值(0-255) (int)。

您也可以通过索引 [2] 取得这个值。

statistics.l_stdev()

返回RGB5656 LAB 中L的标准偏差值(0-255) (int)。

您也可以通过索引 [3] 取得这个值。

statistics.l_min()

返回RGB5656 LAB 中L的最小值(0-255) (int)。

您也可以通过索引 [4] 取得这个值。

statistics.l_max()

返回RGB5656 LAB 中L的最大值(0-255) (int)。

您也可以通过索引 [5] 取得这个值。

statistics.l_lq()

返回RGB5656 LAB 中L的下四分值(0-255) (int)。

您也可以通过索引 [6] 取得这个值。

statistics.l_uq()

返回RGB5656 LAB 中L的上四分值(0-255) (int)。

您也可以通过索引 [7] 取得这个值。

RGB中A相关

statistics.a_mean()

返回RGB5656 LAB 中A的均值(0-255) (int)。

您也可以通过索引 [8] 取得这个值。

statistics.a_median()

返回RGB5656 LAB 中A的中值(0-255) (int)。

您也可以通过索引 [9] 取得这个值。

statistics.a_mode()

返回RGB5656 LAB 中A的众值(0-255) (int)。

您也可以通过索引 [10] 取得这个值。

statistics.a_stdev()

返回RGB5656 LAB 中A的标准偏差值(0-255) (int)。

您也可以通过索引 [11] 取得这个值。

statistics.a_min()

返回RGB5656 LAB 中A的最小值(0-255) (int)。

您也可以通过索引 [12] 取得这个值。

statistics.a_max()

返回RGB5656 LAB 中A的最大值(0-255) (int)。

您也可以通过索引 [13] 取得这个值。

statistics.a_lq()

返回RGB5656 LAB 中A的下四分值(0-255) (int)。

您也可以通过索引 [14] 取得这个值。

statistics.a_uq()

返回RGB5656 LAB 中A的上四分值(0-255) (int)。

您也可以通过索引 [15] 取得这个值。

RGB中B相关

statistics.b_mean()

返回RGB5656 LAB 中B的均值(0-255) (int)。

您也可以通过索引 [16] 取得这个值。

statistics.b_median()

返回RGB5656 LAB 中B的中值(0-255) (int)。

您也可以通过索引 [17] 取得这个值。

statistics.b_mode()

返回RGB5656 LAB 中B的众值(0-255) (int)。

您也可以通过索引 [18] 取得这个值。

statistics.b_stdev()

返回RGB5656 LAB 中B的标准差值(0-255) (int)。

您也可以通过索引 [19] 取得这个值。

statistics.b_min()

返回RGB5656 LAB 中B的最小值(0-255) (int)。

您也可以通过索引 [20] 取得这个值。

statistics.b_max()

返回RGB5656 LAB 中B的最大值(0-255) (int)。

您也可以通过索引 [21] 取得这个值。

statistics.b_lq()

返回RGB5656 LAB 中B的下四分值(0-255) (int)。

您也可以通过索引 [22] 取得这个值。

statistics.b_uq()

返回RGB5656 LAB 中B的上四分值(0-255) (int)。

您也可以通过索引 [23] 取得这个值。

5.3感兴趣区和统计结合

感兴趣区和统计结合起来就可以看识别别的准确度

  • 26
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
OpenMV是一款开源的嵌入式机器视觉开发套件,主要用于在低成本微控制器上运行计算机视觉应用。它包含了一个基于Python的IDE和一组优化的库,特别适合于在资源受限的设备上进行实时图像处理和简单物体识别。 对于复杂物体识别OpenMV主要通过以下几个步骤来进行: 1. **图像预处理**:使用OpenMV的摄像头模块捕获图像,然后可能需要进行灰度化、二值化、边缘检测等预处理步骤,以减少数据复杂性。 2. **特征提取**:利用OpenCV或其他库提供的特征检测算法(如Haar特征、HOG或SIFT),对图像中的目标进行描述,这些特征有助于区分复杂物体。 3. **对象识别**:通过训练好的机器学习模型(如OpenMV提供的模板匹配、机器学习分类器等)来识别这些特征。这可能涉及到将图像特征与预定义的模板进行比较,或者使用深度学习模型进行更高级别的分类。 4. **结果分析与处理**:识别出目标后,根据应用场景,可能还需要进一步的分析(如运动跟踪、姿态估计)或采取相应的行动(如控制舵机移动等)。 然而,由于OpenMV硬件资源有限,对于非常复杂的物体识别,如大规模的物体数据库或深度学习模型,可能并不适用。在这种情况下,更适合使用像树莓派(Raspberry Pi)配合RasPBerrypi Camera模块,或者更高性能的计算机配合更强大的深度学习框架,如TensorFlow或PyTorch。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值