在OpenCV里实现条码区域识别的方法示例

yipeiwu_com5年前Python基础

在我们识别条码的过程里,首先要找到条码所在的区域,那么怎么样来找到这个条码的区域呢?如果仔细地观察条码,会发现条码有一个特性,就是水平的梯度和垂值的梯度会不一样,如果进行相减,会发现差值比较大。如果其它位置的图像一般不会这样。利用这个特性,就可以把条码所在区域求出来。

演示的代码如下:

#python 3.7.4,opencv4.1
#蔡军生 https://blog.csdn.net/caimouse/article/details/51749579
#9073204@qq.com
#
import numpy as np
import cv2
from matplotlib import pyplot as plt
 
#读取图片
img = cv2.imread('barcode6.jpg')
#
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
cv2.imshow('gray', gray)
 
gradX = cv2.Sobel(gray, ddepth=cv2.CV_32F, dx=1, dy=0, ksize=-1)
gradY = cv2.Sobel(gray, ddepth=cv2.CV_32F, dx=0, dy=1, ksize=-1)
 
gradient = cv2.subtract(gradX, gradY)
gradient = cv2.convertScaleAbs(gradient)
cv2.imshow('gradient', gradient)
 
blurred = cv2.blur(gradient, (9, 9))
(_, thresh) = cv2.threshold(blurred, 225, 255, cv2.THRESH_BINARY)
cv2.imshow('thresh', thresh)
 
kernel = cv2.getStructuringElement(cv2.MORPH_RECT, (21, 7))
closed = cv2.morphologyEx(thresh, cv2.MORPH_CLOSE, kernel)
 
closed = cv2.erode(closed, None, iterations = 4)
closed = cv2.dilate(closed, None, iterations = 4)
cv2.imshow('closed', closed)
 
cnts,hierarchy = cv2.findContours(closed.copy(), cv2.RETR_EXTERNAL,
	cv2.CHAIN_APPROX_SIMPLE)
c = sorted(cnts, key = cv2.contourArea, reverse = True)[0]
 
#找最大的边框
rect = cv2.minAreaRect(c)
box = cv2.boxPoints(rect)
box = np.int0(box)
 
# 画一个找到的方框
cv2.drawContours(img, [box], -1, (0, 255, 0), 3)
  
cv2.imshow('img', img)
 
#
cv2.waitKey(0)
cv2.destroyAllWindows()

结果输出如下:

转换为灰度图

X轴梯度减去Y轴梯度求绝对值

经过阈值处理后的图片

经过形态学处理后的图片

最后的输出结果

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持【听图阁-专注于Python设计】。

相关文章

Python语言编写电脑时间自动同步小工具

Python语言编写电脑时间自动同步小工具

话不多说,小工具需求如下: 功能需求 -- 电脑开机后自动执行时间同步 非功能需求 -- 安装执行简单,无需安装额外环境 一、代码实现 基于以上需求,思路如下:访问网络获取北京时间,然后...

python使用多进程的实例详解

python多线程适合IO密集型场景,而在CPU密集型场景,并不能充分利用多核CPU,而协程本质基于线程,同样不能充分发挥多核的优势。 针对计算密集型场景需要使用多进程,python的m...

解决pip install xxx报错SyntaxError: invalid syntax的问题

解决pip install xxx报错SyntaxError: invalid syntax的问题

python——pip install xxx报错SyntaxError: invalid syntax 在安装好python后,进入python运行环境后,因为我要用pip安装开发We...

python高手之路python处理excel文件(方法汇总)

python高手之路python处理excel文件(方法汇总)

用python来自动生成excel数据文件。python处理excel文件主要是第三方模块库xlrd、xlwt、xluntils和pyExcelerator,除此之外,python处理e...

Python 多线程的实例详解

 Python 多线程的实例详解 一)线程基础 1、创建线程: thread模块提供了start_new_thread函数,用以创建线程。start_new_thread函...