关于二维码和条形码的检测和识别,在OpenCV中已经有提供了对应的API,cv2.QRCodeDetector() | cv2.barcode_BarcodeDetector() ,相关的实现极其简单:

只需要上述短短三行代码即可检测二维码和条形码的位置并识别码内信息,相关parameter和retval自行查找。

下述是不借助OpenCV直接实现的API来实现定位

Code:

 1 def barcode(image):
2 gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
3 blur = cv2.GaussianBlur(gray, (5, 5), cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)
4 cv2.imshow('GaussianBlur', blur)
5 kernel_x = numpy.array([
6 [-1, 0, 1],
7 [-2, 0, 2],
8 [-1, 0, 1]
9 ])
10 kernel_y = numpy.array([
11 [-1, -2, -1],
12 [0, 0, 0],
13 [1, 2, 1]
14 ])
15 x = cv2.filter2D(blur, -1, kernel_x)
16 y = cv2.filter2D(blur, -1, kernel_y)
17 cv2.imshow('Sobel', x)
18 _, threshold = cv2.threshold(x, 127, 255, cv2.THRESH_BINARY)
19 kernel = numpy.ones((3, 3), numpy.uint8)
20 r_e = cv2.erode(threshold, kernel, iterations=1)
21 r_d = cv2.dilate(r_e, kernel, iterations=10)
22 contours, hir = cv2.findContours(r_d, cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE)
23 max_contour = numpy.array(max(contours, key=cv2.contourArea))
24 x, y, w, h = cv2.boundingRect(max_contour)
25 cv2.rectangle(image, (x, y), (x+w, y+h), (0, 255, 0), 2)

定位思路:

1、转灰度图

2、通过高斯模糊去除图像噪点,如果不使用高斯模糊去噪的话,条形码的线段会有些弯曲,看场景是否需要

3、使用sobel进行边缘检测,请注意分辨sobel水平变换和垂直变换的差别

4、进行二值化,相比于上一步的sobel,可以发现消除一些独立的噪点,但是还是保留了一些,可以更改参数再进行调整

5、进行形态学运算(膨胀腐蚀)对应代码中的iterations的次数是尝试过后的最佳成效,可以自己调整次数看看不同效果

6、寻找轮廓,通过对原图处理后,我们得到的上述最终的效果图可以发现,最大的白色区域就是我们需要的条形码区域,所以我们通过cv2.contourArea()和max()配合来寻找最大面积,最后在原图上绘制出我们的目标区域

值得注意的是,上述思路有比较大的局限性,首先是针对原图的显示问题,如果不是水平拍摄,是垂直拍摄时,我们需要更改sobel使用垂直变换卷积核,或者对原图进行旋转。

其次是,我们定位最终的barcode区域使用到了max来查找最大面积,所以这就意味着,原图中,barcode整体轮廓必须是最大的。

参考博客:一种改进的条形码定位方案,基于openCV实现,附完整源代码_opencv条形码识别-CSDN博客

【Python】【OpenCV】定位条形码(一)的更多相关文章

  1. python+opencv实现车牌定位

    写在前面 HIT大三上学期视听觉信号处理课程中视觉部分的实验三,经过和学长们实验的对比发现每一级实验要求都不一样,因此这里标明了是2019年秋季学期的视觉实验三. 由于时间紧张,代码没有进行任何优化, ...

  2. python opencv识别蓝牌车牌号 之 取出车牌号 (1/3)

    概述 车牌识别是计算机视频图像识别技术在车辆牌照识别中的一种应用,通常来讲如果结合opencv进行车牌识别主要分为四个大步骤,分别为: 图像采集 车牌定位 分割车牌字符 字符识别 当然,如果结合了机器 ...

  3. 搭建基于python +opencv+Beautifulsoup+Neurolab机器学习平台

    搭建基于python +opencv+Beautifulsoup+Neurolab机器学习平台 By 子敬叔叔 最近在学习麦好的<机器学习实践指南案例应用解析第二版>,在安装学习环境的时候 ...

  4. .NET + OpenCV & Python + OpenCV 配置

    最近需要做一个图像识别的GUI应用,权衡了Opencv+ 1)QT,2)Python GUI,3).NET后选择了.NET... 本文给出C#+Opencv和Python+Opencv的相应参考,节省 ...

  5. RPi 2B python opencv camera demo example

    /************************************************************************************** * RPi 2B pyt ...

  6. Python+OpenCV图像处理(一)

    Python+OpenCV图像处理(一): 读取,写入和展示图片 调用摄像头拍照 调用摄像头录制视频 1. 读取.写入和展示图片 图像读入:cv2.imread() 使用函数cv2.imread() ...

  7. python opencv show图片,debug技巧

    debug的时候可以直接把图片画出来debug. imshow函数就是python opencv的展示图片的函数,第一个是你要起的图片名,第二个是图片本身.waitKey函数是用来展示图片多久的,默认 ...

  8. Python+OpenCV图像处理(一)——读取显示一张图片

    先在此处先声明,后面学习python+opencv图像处理时均参考这位博主的博文https://blog.csdn.net/u011321546/article/category/7495016/2? ...

  9. Python+opencv 图像拼接

    1.http://www.cnblogs.com/skyfsm/p/7411961.html ,给出了很好地拼接算法实现 2.由于不是Python的,所以简单做了一些翻译转成Python+opencv ...

  10. 【python+opencv】直线检测+圆检测

     Python+OpenCV图像处理—— 直线检测 直线检测理论知识: 1.霍夫变换(Hough Transform) 霍夫变换是图像处理中从图像中识别几何形状的基本方法之一,应用很广泛,也有很多改进 ...

随机推荐

  1. GDB苹果网页一键打包工具(IOS,IPA,苹果应用网页打包,WINDOWS平台)

    工具简介 GDB苹果网页一键打包工具(IOS,IPA,苹果应用网页打包,Windows平台)可以把本地HTML项目或者网站打包为一个苹果应用IPA文件,无需编写任何代码,支持在苹果设备上安装运行.作为 ...

  2. 「codeforces - 1720」

    壹 最近 cq 情况很急急,昨天出去排核酸整了两个半小时,十分无语.提前放假自然是一大好事,但是一个人在家也蛮无聊.不要再涨体重了为好,这一年间他妈 delta 了 10 kilos,算了下 BMI ...

  3. 小札 Combinatorics & Inclusion-Exclusion Principle 1

    「codeforces - 340E」Iahub and Permutations link. 把 \(1,\dots,n\) 中剩下没被固定的数的数量记作 \(s\),再把这其中不担心有会填到自己身 ...

  4. 解决Dependency 'fastdfs-client-java’not found

    如何能把 fastdfs的jar包安装到本地的仓库中(因为中央仓库没有FASTDFS的jar包地址) 1.首先去github上下载下来fastdfs的压缩包 下载链接 然后直接解压出来 2.使用cmd ...

  5. Angular2 通过自定义指令限制输入框输入类型

    ** 温馨提示:如需转载本文,请注明内容出处.** 本文链接:https://www.cnblogs.com/grom/p/16814577.html 在input控件中,使用type="n ...

  6. HDU 1312 Red and Black 题解

    //注意边界判断,调了好久#include <iostream> #include <queue> using namespace std; #define check(x,y ...

  7. BGP路由协议学习一

    转载请注明出处: 1.BGP的特点: BGP使用TCP作为其传输层协议(端口号为179),使用触发式路由更新,而不是周期性路由更新. BGP能够承载大批量的路由信息,能够支撑大规模网络. BGP提供了 ...

  8. Android Studio3.2.1升级刨坑记录

    Android Studio出了3.2.1,我用的是2.3,所有决定升级一下,看看如何 为了保险一点,下载了官方的解压版本,也就是说不含sdk,下载android-studio-ide-181.501 ...

  9. Lucky Array 题解

    Lucky Array 题目大意 维护一个序列,支持以下操作: 区间加一个大于 \(0\) 的数. 区间查询有多少个数位上只包含 \(4\) 或 \(7\) 的数. 思路分析 看起来很不可做,但考虑到 ...

  10. FSCTF 2023(公开赛道)CRYPTO WP

    RSA 1 1.题目信息 提交格式:FSCTF{你所解出的内容} p=1458769258361 q=4556983871563 e=17 求d 2.解题方法 exp from gmpy2 impor ...