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实现统计代码行数的方法
May 22 Python
Django中间件工作流程及写法实例代码
Feb 06 Python
PyQt5每天必学之工具提示功能
Apr 19 Python
Python全排列操作实例分析
Jul 24 Python
对python 生成拼接xml报文的示例详解
Dec 28 Python
python使用Plotly绘图工具绘制散点图、线形图
Apr 02 Python
详解Python 定时框架 Apscheduler原理及安装过程
Jun 14 Python
python程序 线程队列queue使用方法解析
Sep 23 Python
如何基于Python实现电子邮件的发送
Dec 16 Python
Tensorflow读取并输出已保存模型的权重数值方式
Jan 04 Python
tensorflow下的图片标准化函数per_image_standardization用法
Jun 30 Python
详解Python描述符的工作原理
Jun 11 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中flush()、ob_flush()、ob_end_flush()的区别介绍
2013/02/17 PHP
安装apache2.2.22配置php5.4(具体操作步骤)
2013/06/26 PHP
PHP动态输出JavaScript代码实例
2015/02/12 PHP
php插件Xajax使用方法详解
2017/08/31 PHP
php慢查询日志和错误日志使用详解
2021/02/27 PHP
js停止输出代码
2008/07/20 Javascript
JavaScript 权威指南(第四版) 读书笔记
2009/08/11 Javascript
基于jQuery的消息提示插件 DivAlert之旅(二)
2010/04/01 Javascript
js 设置选中行的样式的实现代码
2010/05/24 Javascript
JavaScript实现生成GUID(全局统一标识符)
2014/09/05 Javascript
Linux下使用jq友好的打印JSON技巧分享
2014/11/18 Javascript
js判断手机号运营商的方法
2015/10/23 Javascript
javascript每日必学之条件分支
2016/02/17 Javascript
Node.js操作Firebird数据库教程
2016/03/04 Javascript
js模拟微博发布消息
2017/02/23 Javascript
javascript算法之二叉搜索树的示例代码
2017/09/12 Javascript
es6数组之扩展运算符操作实例分析
2020/04/25 Javascript
一篇文章带你使用Typescript封装一个Vue组件(简单易懂)
2020/06/05 Javascript
通过实例解析chrome如何在mac环境中安装vue-devtools插件
2020/07/10 Javascript
原生jQuery实现只显示年份下拉框
2020/12/24 jQuery
[01:02:25]2014 DOTA2华西杯精英邀请赛5 24 NewBee VS VG
2014/05/25 DOTA
[45:18]完美世界DOTA2联赛循环赛 PXG vs IO 第二场 11.06
2020/11/09 DOTA
python基于socket实现网络广播的方法
2015/04/29 Python
python分割列表(list)的方法示例
2017/05/07 Python
对python的文件内注释 help注释方法
2018/05/23 Python
对numpy中的数组条件筛选功能详解
2018/07/02 Python
Python Numpy:找到list中的np.nan值方法
2018/10/30 Python
如何更换python默认编辑器的背景色
2020/08/10 Python
浅析关于Keras的安装(pycharm)和初步理解
2020/10/23 Python
websocket+sockjs+stompjs详解及实例代码
2018/11/30 HTML / CSS
家庭户外服装:Hawkshead
2017/11/02 全球购物
Needle & Thread官网:英国仙女品牌
2018/01/13 全球购物
JSF的标签库有哪些
2012/04/27 面试题
爱国口号
2014/06/19 职场文书
运动会跳远广播稿5篇
2014/09/17 职场文书
golang 如何通过反射创建新对象
2021/04/28 Golang