Opencv+Python识别PCB板图片的步骤


Posted in Python onJanuary 07, 2021

任务要求:

基于模板匹配算法识别PCB板型号

使用工具:

Python3、OpenCV

使用模板匹配算法,模板匹配是一种最原始、最基本的模式识别方法,研究某一特定对象物的图案位于图像的什么地方,进而识别对象物,模板匹配具有自身的局限性,主要表现在它只能进行平行移动,即原图像中的匹配目标不能发生旋转或大小变化。

事先准备好待检测PCB与其对应的模板:

Opencv+Python识别PCB板图片的步骤

子模版:

Opencv+Python识别PCB板图片的步骤

基本流程如下:

1、在整个图像区域发现与给定子图像匹配的小块区域

2、选取模板图像T(给定的子图像)

3、另外需要一个待检测的图像——源图像S

4、工作方法:在检测图像上,从左到右,从上到下计算模板图像与重叠, 子图像的匹配度,匹配程度越大,两者相同的可能性就越大。

OpenCV提供了6种模板匹配算法:

平方差匹配法CV_TM_SQDIFF;

归一化平方差匹配法CV_TM_SQDIFF_NORMED;

相关匹配法CV_TM_CCORR;

归一化相关匹配法CV_TM_CCORR_NORMED;

相关系数匹配法CV_TM_CCOEFF;

归一化相关系数匹配法CV_TM_CCOEFF_NORMED;

后面经过实验,我们主要是从以上的六种中选择了归一化相关系数匹配法CV_TM_CCOEFF_NORMED,基本原理公式为:

 代码部分展示:

import cv2
import numpy as np
from matplotlib import pyplot as plt

#读取检测图像
img = cv2.imread('img8.bmp', 0)
#读取模板图像
template1=cv2.imread('moban1.bmp', 0)
template2=......
#建立模板列表
template=[template1,template2,template3,template4]
# 模板匹配:归一化相关系数匹配方法
res1=cv2.matchTemplate(img, template1, cv2.TM_CCOEFF_NORMED)
res2=cv2.matchTemplate(......)
#提取相关系数
min_val1, max_val1, min_loc1, max_loc1 =cv2.minMaxLoc(res1)
min_val2, ......

#相关系数对比(max_val),越接近1,匹配程度越高
max_val=[1-max_val1,1-max_val2,1-max_val3,1-max_val4]
j=max_val.index(min(max_val))

#根据提取的相关系数得出对应匹配程度最高的模板
h, w = template[j].shape[:2]  # 计算模板图像的高和宽 rows->h, cols->w
pes=cv2.matchTemplate(img, template[j], cv2.TM_CCOEFF_NORMED) #模板匹配
in_val, ax_val, in_loc, ax_loc =cv2.minMaxLoc(pes)

#在原图中框出模板匹配的位置
left_top = ax_loc  # 左上角
right_bottom = (left_top[0] + w, left_top[1] + h)  # 右下角
cv2.rectangle(img, left_top, right_bottom, 255, 2) # 画出矩形位置
#绘制模板图像
plt.subplot(121), plt.imshow(template[j], cmap='gray')
plt.title('pcb type'),plt.xticks([]), plt.yticks([])
#绘制检测图像
plt.subplot(122), plt.imshow(img, cmap='gray')
plt.title('img'), plt.xticks([]), plt.yticks([])
plt.show()

实验结果:

Opencv+Python识别PCB板图片的步骤

需要完整代码以及图片素材的,请留下评论可与博主进行联系。

以上就是Opencv+Python识别PCB板图片的步骤的详细内容,更多关于Opencv+Python识别PCB板的资料请关注三水点靠木其它相关文章!

Python 相关文章推荐
Python的迭代器和生成器使用实例
Jan 14 Python
利用 python 对目录下的文件进行过滤删除
Dec 27 Python
python使用xpath中遇到:到底是什么?
Jan 04 Python
Python元组 tuple的概念与基本操作详解【定义、创建、访问、计数、推导式等】
Oct 30 Python
Python 实现数组相减示例
Dec 27 Python
python如何通过pyqt5实现进度条
Jan 20 Python
python 伯努利分布详解
Feb 25 Python
解决python运行启动报错问题
Jun 01 Python
python使用hdfs3模块对hdfs进行操作详解
Jun 06 Python
PyCharm2020.1.2社区版安装,配置及使用教程详解(Windows)
Aug 07 Python
浅谈Python 钉钉报警必备知识系统讲解
Aug 17 Python
Django Auth用户认证组件实现代码
Oct 13 Python
Django使用django-simple-captcha做验证码的实现示例
Jan 07 #Python
python 实现百度网盘非会员上传超过500个文件的方法
Jan 07 #Python
Django权限控制的使用
Jan 07 #Python
详解Django关于StreamingHttpResponse与FileResponse文件下载的最优方法
Jan 07 #Python
Jupyter Notebook添加代码自动补全功能的实现
Jan 07 #Python
jupyter notebook更换皮肤主题的实现
Jan 07 #Python
基于 Python 实践感知器分类算法
Jan 07 #Python
You might like
在PHP中检查PHP文件是否有语法错误的方法
2009/12/23 PHP
php数组函数序列之each() - 获取数组当前内部指针所指向元素的键名和键值,并将指针移到下一位
2011/10/31 PHP
php swoole多进程/多线程用法示例【基于php7nts版】
2019/08/12 PHP
PPK 谈 JavaScript 的 this 关键字 [翻译]
2009/09/29 Javascript
jQuery dialog 异步调用ashx,webservice数据的代码
2010/08/03 Javascript
jquery实现的一个导航滚动效果具体代码
2013/05/27 Javascript
JavaScript中的bold()方法使用详解
2015/06/08 Javascript
JavaScript入门系列之知识点总结
2016/03/24 Javascript
js获取鼠标点击的对象,点击另一个按钮删除该对象的实现代码
2016/05/13 Javascript
javascript insertAfter()定义与用法示例
2016/07/25 Javascript
原生态js,鼠标按下后,经过了那些单元格的简单实例
2016/08/11 Javascript
JavaScript实现图片瀑布流和底部刷新
2017/01/02 Javascript
jQuery实现的分页功能示例
2017/01/22 Javascript
用纯Node.JS弹出Windows系统消息提示框实例(MessageBox)
2017/05/17 Javascript
微信小程序如何获取用户收货地址
2018/11/27 Javascript
nodejs中方法和模块用法示例
2018/12/24 NodeJs
浅析JavaScript异步代码优化
2019/03/18 Javascript
原生js实现五子棋游戏
2020/05/28 Javascript
Python深入学习之对象的属性
2014/08/31 Python
Django自定义认证方式用法示例
2017/06/23 Python
python3操作微信itchat实现发送图片
2018/02/24 Python
python入门教程 python入门神图一张
2018/03/05 Python
python 消除 futureWarning问题的解决
2019/12/25 Python
对python pandas中 inplace 参数的理解
2020/06/27 Python
python 使用递归的方式实现语义图片分割功能
2020/07/16 Python
python反扒机制的5种解决方法
2021/02/06 Python
基于HTML5 Canvas 实现弹出框效果
2017/06/05 HTML / CSS
英国领先的在线旅游和休闲零售商:lastminute.com
2019/01/23 全球购物
世界上第一个创建了罩杯系统的美国内衣品牌:Maidenform
2019/03/23 全球购物
餐饮业创业计划书范文
2014/01/06 职场文书
幼儿园中班教学反思
2014/02/10 职场文书
创建无烟单位实施方案
2014/03/29 职场文书
服装发布会策划方案
2014/05/22 职场文书
C3 线性化算法与 MRO之Python中的多继承
2021/10/05 Python
关于MybatisPlus配置双数据库驱动连接数据库问题
2022/01/22 Java/Android
JS封装cavans多种滤镜组件
2022/02/15 Javascript