• 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】

  • 相关阅读:
    系统升级丨酷雷曼6大功能,轻松玩转全景营销
    SpringBoot如何集成Log模块呢?
    大学生抗疫逆行者网页作业 感动人物HTML网页代码成品 最美逆行者dreamweaver网页模板 致敬疫情感动人物网页设计制作
    SSE图像算法优化系列三十一:RGB2HSL/RGB2HSV及HSL2RGB/HSV2RGB的指令集优化-上。
    Flexible-Job-Shop-Scheduling-Problem解读
    Dynamics 365 使用ILMerge 合并CRM开发后的DLL
    CocosCreator 面试题(八)Cocos Creator 中如何做资源管理
    UltraISO制作U盘系统盘安装openEuler22.03和搭建cuda环境
    elementUI中的table动态表单记录
    WebRTC 源码 编译 iOS端
  • 原文地址:https://blog.csdn.net/weixin_44570083/article/details/126363187