OpenCV提取图书条码(ISBN码)
利用条码的特征即白色背景,不同宽度的黑色条码进行图书条码提取
1、首先是读取图像,默认是(B,G,R)图像:
import cv2 as cv
#bgr通道顺序的彩色图像
origin_image = cv.imread("E:/PythonFiles/images/shu.bmp")
cv.imshow("image",origin_image)
#复制图片 保留原图
image = origin_image.copy()
image_background = origin_image.copy()
读取图像之后,根据后续的需要进行多次的图像复制,保留原图用于最后的操作。
2、获得图像的宽、高:
gray = cv.cvtColor(image,cv.COLOR_BGR2GRAY)
h,w = gray.shape
#h,w,_ = image.shape
3、提取b、g、r三个通道:
#提取 三个通道
b = image[:,:,0];g=image[:,:,1];r=image[:,:,2]
4、根据背景特征获得图片
白色的BGR通道值为(255,255,255)。
遍历三个通道每一个像素点的值时,考虑到灯光、拍摄角度等外界影响因素,可以给该值与255的差设置一个范围,可以更好得获得想要的结果。
for i in range(h):for j in range(w):if (abs(b[i,j]-255)<50) and (abs(g[i,j]-255)<50) and (abs(r[i,j]-255)<50):image[:,:,:][i,j] = 255else:image[:,:,:][i,j] = 0
此时获得为三通道的图片!
5、灰度、二值化处理
gray = cv.cvtColor(image,cv.COLOR_BGR2GRAY)
_,binary = cv.threshold(gray,0,255,cv.THRESH_OTSU)
#cv.imshow("binary",binary)
6、形态学处理
可以更改结构元的大小,获得不同的处理效果。
#膨胀操作 进行连接
kernel = cv.getStructuringElement(cv.MORPH_RECT,(20,1))
binary = cv.dilate(binary,kernel)
#cv.imshow("dilate",binary)
#腐蚀操作 去噪
kernel = cv.getStructuringElement(cv.MORPH_RECT,(1,15))
binary = cv.erode(binary,kernel)
#cv.imshow("erode",binary)
膨胀效果:
腐蚀效果:
7、根据轮廓特征在原图上绘制最小包围矩形
找出轮廓后,遍历全部的轮廓并用最小矩形包围;然后根据条码宽、高的比例范围,得出最终结果;再利用返回的四个值(x、y、w、h)在原图上绘制出矩形框。
contours,_ = cv.findContours(binary,cv.RETR_EXTERNAL,cv.CHAIN_APPROX_SIMPLE)
for contour in contours:rect = cv.boundingRect(contour)x = rect[0]; y = rect[1]; w = rect[2]; h = rect[3]if (w>1.2*h) and (w<1.6*h):cv.rectangle(image_background,(x,y),(x+w,y+h),(0,0,255),3)
cv.imshow("jieguo",image_background)
8、提取条码图片
提取图片时,注意左上角坐标位置(x,y),图片宽高(w,h)与矩阵行列(r,c)三者的关系。
ROI = origin_image[y:y+h,x:x+w]
cv.imshow("ROI",ROI)
cv.waitKey()
cv.destroyAllWindows()
写在最后:
在该过程中是利用目标区域的颜色特征进行提取,根据这一方法,整个的提取流程也就可以用到其他方面,例如车牌的提取,感兴趣的可以试一下。
OpenCV提取图书条码(ISBN码)相关推荐
- ISBN码识别-DA数据结构二级项目
ISBN码识别 输入图像 灰度化处理 去噪处理 二值化处理 倾斜图像修正 截取 ISBN 号所在行 字符分割处理 字符识别处理 某些可以使用的函数 国际标准书号.这个号码印刷在每本图书封底(或护封)的 ...
- 什么是ISBN码及其如何制作
国际标准书号(International Standard Book Number),简称ISBN,是国际上通用的出版物标识编码. 中国标准书号由标识符ISBN和十三位数字编码组成.十三位数字编码又分 ...
- Python,OpenCV提取图片中的多个茄子种子轮廓,并按从左到右排序后显示
Python,OpenCV提取图片中的多个茄子种子轮廓,并按从左到右排序后显示 1. 效果图 2. 源码 写这篇博客源于博友的提问,期望把下图中的多个茄子种子按从左到右的顺序提取出来: 1. 效果图 ...
- PHP校验ISBN码的函数
国际标准书号(International Standard Book Number,ISBN:拟发音is-ben),是国际通用的图书或独立的出版物(除定期出版的期刊)代码.出版社可以通过国际标准书号清 ...
- python更改图片中物体的颜色_Python Opencv提取图片中某种颜色组成的图形的方法...
Python Opencv提取图片中某种颜色组成的图形的方法 主要目标识别图中红色的裂缝,尝试了几种不同的方法,最后发现比较每一点的RGB差值可以很好的解决这个问题,也就是提取图片中的红色相关信息.处 ...
- jsp+servlet+mysql实现的图书管理系统源码
此篇给大家推荐的是jsp+servlet+mysql实现的图书管理系统源码: 随着社会信息量的与日俱增,作为信息存储的主要媒体之一的图书,数量,规模比以往任何时候都大的多 不论个人还是图书管理部门都需 ...
- java爬取当当网所有分类的图书信息(ISBN,作者,出版社,价格,所属分类等)
java爬取当当网所有分类的图书信息(ISBN,作者,出版社,价格,所属分类等) 顺手写的,没有建立新项目,放我自己的项目的一个文件夹里了,有兴趣的朋友可以拉下来试试 https://gitee.co ...
- 出版图书二维码,要如何制作呢?
在出版图书中使用二维码已经非常普遍.且印刷在图书上的二维码类型也更加多样化.出版社可以通过一个简单的二维码,来向读者传递更加有趣的和丰富的内容,同时更加方便和读者进行互动沟通,还能实现私域引流的目的. ...
- 金蝶云星空二维码整体解决方案 金蝶云星空条码管理系统 金蝶ERP移动解决方案 金蝶云星空条码扫描 金蝶云星空WMS仓库移动扫码 金蝶安卓PDA扫码方案 金蝶云星空出入库盘点出货条码扫码 提供源码
本人在ERP实施公司做顾问四五年,参与企业实施ERP十多个项目,非常熟悉企业ERP流程,在实施过程遇到众多问题,提出了不少根据企业具体情况的解决方案. 最近定制开发了一套适合企业的条 ...
- JAVA采集图书的ISBN编号编码、出版社、出版时间、版次、正文语种、定价等信息
今天分享我的一个练手项目,用来采集图书的ISBN编号编码.出版社.出版时间.版次.正文语种.定价等信息. 本项目介绍了如何使用代理IP和多线程采集公开数据,项目尚不具备使用条件,仅供学习参考. 项目需 ...
最新文章
- pandas筛选dataframe列名称中包含特定字符串的数据列(select columns contains specifiec substring in dataframe)
- ES6基础之——对比两个值是否相等Object.is()
- html 未来元素绑定事件,jquery on如何给未来元素绑定事件?
- 【机器学习】什么是机器学习?(上)
- Could not set property 'xxx' of 'class 'xxx' with value 'xxx'
- C语言字符5,C语言编程(练习5:字符串与字符串函数)-Go语言中文社区
- js计算工时,去周末,设置上下班时间
- 基于消息中间件RabbitMQ实现简单的RPC服务
- Java 并发编程之内置锁 synchronized
- 【定时任务|开机启动】Windows Server 2008/2012 计划任务配置(任务计划程序)每分钟执行BAT...
- [分组背包]Luogu1064 金明的预算方案
- linux添加Qt的fontconfig,qt – 如何在Red Hat 5.3中将fontconfig更新为更新版本?
- 敏捷转型中的敏态与稳态
- BurpSuite使用详解(三)Spider功能
- 路由器不同网段虚拟服务器设置,局域网中不同网段互访?静态路由表必须要学会设置...
- PCB_元件模型创建
- stm32 KEIL AC6 优化0程序不运行问题解决
- 微信蓝牙设备开发教程之获取蓝牙设备deviceid和设备二维码(2)
- 新型勒索软件Phobos利用弱安全性攻击目标
- 简单理解 tr069协议