当然,媒体也无济于事,他们将危言耸听每一个小场景。从冻伤的家庭在寒风中露营整晚,到瞒姗老太在大门打开后被蜂拥而入的低价抢购人群踩踏,就像侏罗纪公园中似鸡龙的蹂躏。这所有的一切只是因为她想为9岁的孙女蒂米买到最新的光晕游戏,而蒂米的父母,在去年的这个时候离世了,就在沃尔玛,在这黑色星期五。

用 Python 和 OpenCV 检测图片上的的条形码

这篇博文的目的是应用计算机视觉和图像处理技术,展示一个条形码检测的基本实现。我所实现的算法本质上基于StackOverflow 上的这个问题,浏览代码之后,我提供了一些对原始算法的更新和改进。

首先需要留意的是,这个算法并不是对所有条形码有效,但会给你基本的关于应用什么类型的技术的直觉。

假设我们要检测下图中的条形码:

图1:包含条形码的示例图片

现在让我们开始写点代码,新建一个文件,命名为detect_barcode.py,打开并编码:

我们首先做的是导入所需的软件包,我们将使用NumPy做数值计算,argparse用来解析命令行参数,cv2是OpenCV的绑定。

然后我们设置命令行参数,我们这里需要一个简单的选择,–image是指包含条形码的待检测图像文件的路径。

现在开始真正的图像处理:

12~13行:从磁盘载入图像并转换为灰度图。

17~18行:使用Scharr操作(指定使用ksize = -1)构造灰度图在水平和竖直方向上的梯度幅值表示。

21~22行:Scharr操作之后,我们从x-gradient中减去y-gradient,通过这一步减法操作,最终得到包含高水平梯度和低竖直梯度的图像区域。

上面的gradient表示的原始图像看起来是这样的:

25行:我们要做的第一件事是使用9*9的内核对梯度图进行平均模糊,这将有助于平滑梯度表征的图形中的高频噪声。

26行:然后我们将模糊化后的图形进行二值化,梯度图中任何小于等于255的像素设为0(黑色),其余设为255(白色)。

模糊并二值化后的输出看起来是这个样子:

29行:我们首先使用cv2.getStructuringElement构造一个长方形内核。这个内核的宽度大于长度,因此我们可以消除条形码中垂直条之间的缝隙。

30行:这里进行形态学操作,将上一步得到的内核应用到我们的二值图中,以此来消除竖杠间的缝隙。

现在,你可以看到这些缝隙相比上面的二值化图像基本已经消除:

我们这里所做的是首先进行4次腐蚀(erosion),然后进行4次膨胀(dilation)。腐蚀操作将会腐蚀图像中白色像素,以此来消除小斑点,而膨胀操作将使剩余的白色像素扩张并重新增长回去。

如果小斑点在腐蚀操作中被移除,那么在膨胀操作中就不会再出现。

经过我们这一系列的腐蚀和膨胀操作,可以看到我们已经成功地移除小斑点并得到条形码区域。

图6:成功检测到示例图像中的条形码

下一部分,我们将尝试更多图像。

成功的条形码检测

要跟随这些结果,请使用文章下面的表单去下载本文的源码以及随带的图片。

一旦有了代码和图像,打开一个终端来执行下面的命令:

$python detect_barcode.py --image images/barcode_02.jpg

图7:使用OpenCV检测图像中的一个条形码

检测椰油瓶子上的条形码没有问题。

让我们试下另外一张图片:

$ python detect_barcode.py --image images/barcode_03.jpg

图10:使用计算机视觉和图像处理检测包裹上的条形码

我们的算法再次成功检测到条形码。

最后,我们再尝试一张图片,这个是我最爱的意大利面酱—饶氏自制伏特加酱(Rao’s Homemade Vodka Sauce):

$python detect_barcode.py --image images/barcode_06.jpg

源码下载:http://pan.baidu.com/s/1jGMfcBs

欢迎关注我的博客哦:https://home.cnblogs.com/u/sm123456/

python 食品_食品上面的条形码是干嘛的?看我用Open CV来检测一下!相关推荐

  1. Python爬取网站上面的数据很简单,但是如何爬取APP上面的数据呢

    前言 在我们在爬取手机APP上面的数据的时候,都会借助Fidder来爬取.今天就教大家如何爬取手机APP上面的数据. 很多人学习python,不知道从何学起. 很多人学习python,掌握了基本语法过 ...

  2. 三星内存编码_内存条上面的编码的含义

    内存条上面的编码的含义 一. LGS (乐金 LG ): LGS 的内存可以说是目前市场上见到的最多,也是最广泛的内存了,所以 LGS 应 该首先排第一位. LGS 的内存编码规则: GM 72 X  ...

  3. 路由器上的usb接口有什么用_路由器上面的USB接口有什么用途,你都知道吗?

    路由器是连接两个或多个网络的硬件设备,在网络间起网关的作用,是读取每一个数据包中的地址然后决定如何传送的专用智能性的网络设备,现在几乎每个家庭都有一个或者多个路由器.常见的家用路由器背后都会有一个WA ...

  4. 微星h61m主板jsp1接线图_主板上面的音频跳线如何接 买的惠普台式机的拆机主板 MS 7184 微星的板子图片大家可以百度。...

    匿名用户 1级 2010-08-23 回答 电源开关:POWER SW 英文全称:Power Swicth 可能用名:POWER.POWER SWITCH.ON/OFF.POWER SETUP.PWR ...

  5. python黑洞_史上第一张黑洞照片是用Python合成的?

    这两天,史上第一张黑洞照片,在朋友圈和各大公众号疯传,希望你没有收到视觉中国的律师函. 好了,言归正传. 这个照片是怎么「拍到」的呢? 其中一位研究人员(一个妹子,MIT 的博士,就是头图这位)就在  ...

  6. python总线频率_跳上Avalon总线:一种简化的FPGA接口

    引言本文引用地址:http://www.eepw.com.cn/article/201703/345268.htm 许多新式FPGA设计采用了一些用于控制的嵌入式处理器.一种典型解决方案需要使用诸如N ...

  7. 未封装的扩展程序是什么意思_网线上面的标识代表什么意思?网线的九大扩展应用...

    网线也称双绞线,在网线的外护套上每隔2英尺会印刷上一些标识.一般包含双绞线的类型.NEC/UL防火测试和级别.CSA防火测试.长度标志.生产日期.生产商和产品型号等信息.CAT6 代表六类,UTP:非 ...

  8. 单代号网络图计算例题_阀门上面的代号表示什么,看完就懂了~~

    1 范围 本标准规定了通用阀门的型号编制.类型代号.驱动方式代号.连接形式代号.结构形式代号.密封面材料代号.阀体材料代号和压力代号的表示方法. 本标准适用于通用中闸阀.截止阀.节流阀.蝶阀.球阀.隔 ...

  9. 轩逸车联网功能怎么用_手机上面的NFC功能怎么用的

    生活中可能遇到各种各样需要用到卡的时候,是不是觉得自己钱包都快装不下了,其实手机上的NFC功能,至少可以帮你省掉一半儿的卡,今天就来跟大家聊聊NFC有哪些功能,怎么用的? NFC功能: 充当公交卡 充 ...

最新文章

  1. poj3296--Rinse(三分)
  2. 有些事,父母一定不能依着孩子!
  3. storm mysql druid_Druid 集成
  4. 代码整洁之道(一)最佳实践小结 1
  5. redis python 出错重连_python穿透类 对象代理
  6. 最大子段和动态规划_动态规划解决最大正方形问题
  7. html5手机常亮,vue开发的webapp中的手机物理返回键,以及屏幕常亮处理
  8. [Linux] 编译 与 链接
  9. Javascript之把网页加入收藏夹功能
  10. 2022年最新版 | Flink经典线上问题小盘点
  11. U盘中快捷方式病毒的解决方法
  12. 计算机社团感恩节免费维修周策划书,【关于感恩节的活动策划】大学感恩节活动策划案_早教感恩节活动策划方案_(2)_亲亲宝贝网...
  13. 如何利用JDK8彻底弄懂UNIX时间戳与时区的概念!
  14. RK键盘出现上下左右键对应890←输出,Del键输出q,q键有删除功能解决
  15. 基于卷积神经网络的多目标图像检测研究(三)
  16. 【前端技巧】文本内容单行省略及多行省略
  17. 电脑小白 给 电脑大白 讲 电脑基础(软件推荐篇)
  18. 【洛谷 P4408】逃学的小孩【树的直径】
  19. 一本超越期待的 C++ 书——简评《Boost程序库完全开发指南:深入C++“准”标准库》...
  20. 2019NOIP算法复健+学习

热门文章

  1. 2020.11.20 文献14阅读《我国水电站地下厂房的发展》
  2. html透明图层字体怎么设置,PS透明文字的设置
  3. 裁员、收缩、过冬,云计算怎么了?
  4. 仿制《58同城》首页滑动界面
  5. [转]医院设备维护工程师成长宝典
  6. 免抵退税≠留抵退税 免抵退税部分还需交附加税吗
  7. 人脸识别智能书柜-自助图书借阅柜介绍
  8. 达人评测 i5 12490f和i5 12600kf 选哪个好
  9. C语言头文件下载迅雷,[C语言] 基于GStreamer编写Mp3播放器
  10. ESXI6.7网卡驱动封装之离线封装-(转载)