• OPENCV二维码的发现和定位(python)


    PYTHON OPEN-CV 视觉处理

    二维码的发现和定位

    1、具体操作步骤

    • 先将图片转换为灰度图像

    • 通过OTSU转换为二值图像

    • 通过发现轮廓函数,对二值图像使用轮廓发现得到轮廓

    • 根据二维码三个区域的特征,对轮廓进行面积与比例过滤,最终得到结果

    2、思路(主要根据二维码的三个顶点来判断)

    • 定位点的轮廓有三层轮廓

    • 每个定位点的轮廓中心点一样的

    • 三个定位点可以围成一个等腰直角三角形

    3、存在的问题(以现在摆盘机的扫描情况来看)

    • 只能对单个二维码来进行扫描

    • 只能处理摄像头拍照很清楚的图片进行识别(对imei和二维码的清晰度要求高),拍摄位置的角度偏差比较小,同时考虑光线等元素的干扰

    4、针对上面的问题有以下的改善

    • 阈值分割

    • 可以对图像进行腐蚀或者膨胀的处理

    • 扣取所有正方形区域,逐个检测

    • 然后再进行步骤2中的思路来检测,定位

    5、涉及到的函数说明

    • threshold()固定阈值二值化函数:ret, dst = cv2.threshold(src, thresh, maxval, type)

    (1)参数说明:

    Src:输入图,只能输入单通道图像,通常来说为灰度图

    Thresh:阈值

    Maxval:当像素值超过了阈值(或者小于阈值,根据type来决定),所赋予的值

    Type:二值化操作的类型,包含以下5种类型:

    cv2.THRESH_BINARY; (两极化)

    cv2.THRESH_BINARY_INV;(对调两极化)

    cv2.THRESH_TRUNC; (过度)

    cv2.THRESH_TOZERO;(亮色过度)

    cv2.THRESH_TOZERO_INV;(对调亮色过度)

    (2)返回值:dst 输出图

    • cv2.findContours()寻找轮廓函数:

    img, countour,hierarchy =cv2.findContours(image, mode, method[, contours[, hierarchy[, offset ]]])

    (1)参数说明:

    Image:表示寻找轮廓的图像;

    Mode:表示轮廓的检索模式,有四种(本文介绍的都是新的cv2接口):

    cv2.RETR_EXTERNAL表示只检测外轮廓

    cv2.RETR_LIST检测的轮廓不建立等级关系

    cv2.RETR_CCOMP建立两个等级的轮廓,上面的一层为外边界,里面的一层为内孔的边界信息。如果内孔内还有一个连通物体,这个物体的边界也在顶层。

    cv2.RETR_TREE建立一个等级树结构的轮廓。

    Method:表示轮廓的近似办法

    cv2.CHAIN_APPROX_NONE存储所有的轮廓点,相邻的两个点的像素位置差不超过1,即max(abs(x1-x2),abs(y2-y1))==1

    cv2.CHAIN_APPROX_SIMPLE压缩水平方向,垂直方向,对角线方向的元素,只保留该方向的终点坐标,例如一个矩形轮廓只需4个点来保存轮廓信息

    cv2.CHAIN_APPROX_TC89_L1,CV_CHAIN_APPROX_TC89_KCOS使用teh-Chinl chain 近似算法

    (2)返回值:

    Img:表示返回的图像;

    Coutour:是一个list,每个元素都是一个轮廓(彻底围起来算一个轮廓),用numpy中的ndarray表示。

    Hierarchy:也是一个ndarry,其中的元素个数和轮廓个数相同,每个轮廓contours[i]对应4个hierarchy元素hierarchy[i][0] ~hierarchy[i][3],分别表示后一个轮廓、前一个轮廓、父轮廓、内嵌轮廓的索引编号,如果没有对应项,则该值为负数。

    补充:

    1、膨胀:调整分割区域的形状以获得比较理想的结果,每一个位置的矩形领域内值的最大值作为该位置的输出灰度值,总体亮度会比原图上升,亮的区域变大,暗的区域减少或消失

    2、腐蚀:(类似于膨胀)每一个位置的矩形领域内值的最小值作为该位置的输出灰度值,总体亮度比原图低,亮的区域变小,暗的区域变大

    3、opencv 中的层次结构:https://www.kancloud.cn/aollo/aolloopencv/362441

    介绍:OpenCV使用一个含有四个元素的数组表示父子关系,【Next,Previous,First_Child,Parent】

  • 相关阅读:
    商标变更的流程介绍有哪些
    WPF 控件专题 Canvas 控件详解
    简明 JDBC 数据访问操作库:JdbcHelper(二)
    关于Hadoop多用户管理支持客户端远程操作的理论总结
    CAD Assistant - 3D模型格式转换利器
    为什么我说“链上KYC”是Web3失败的前奏
    Spring boot mybatis 简单示例
    使用yarn创建vite+vue3&&electron多端运行
    NC9 二叉树中和为某一值的路径(一)
    C#变量命名规则(命名规范)
  • 原文地址:https://blog.csdn.net/weixin_44570083/article/details/126363187