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实现代码
Oct 10 Python
简单了解Python matplotlib线的属性
Jun 29 Python
Python之虚拟环境virtualenv,pipreqs生成项目依赖第三方包的方法
Jul 23 Python
python数据归一化及三种方法详解
Aug 06 Python
Python partial函数原理及用法解析
Dec 11 Python
python3中sorted函数里cmp参数改变详解
Mar 12 Python
如何在sublime编辑器中安装python
May 20 Python
使用Keras构造简单的CNN网络实例
Jun 29 Python
经验丰富程序员才知道的8种高级Python技巧
Jul 27 Python
python字典key不能是可以是啥类型
Aug 04 Python
python3实现名片管理系统(控制台版)
Nov 29 Python
python asyncio 协程库的使用
Jan 21 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
增加反向链接的101个方法 站长推荐
2007/01/31 PHP
利用PHP制作简单的内容采集器的原理分析
2008/10/01 PHP
Symfony2开发之控制器用法实例分析
2016/02/05 PHP
YII Framework教程之异常处理详解
2016/03/14 PHP
PHP _construct()函数讲解
2019/02/03 PHP
laravel框架select2多选插件初始化默认选中项操作示例
2020/02/18 PHP
JavaScript中的Document文档对象
2008/01/16 Javascript
javascript打开新窗口同时关闭旧窗口
2009/01/16 Javascript
javascript 对象比较实现代码
2009/04/27 Javascript
javascript 获取元素位置的快速方法 getBoundingClientRect()
2009/11/26 Javascript
toggle一个div显示或隐藏且可扩展成自定义下拉框
2013/09/12 Javascript
window.returnValue使用方法示例介绍
2014/07/03 Javascript
js限制文本框只能输入中文的方法
2015/08/11 Javascript
详解基于Bootstrap扁平化的后台框架Ace
2015/11/27 Javascript
基于css3新属性transform及原生js实现鼠标拖动3d立方体旋转
2016/06/12 Javascript
一个非常好用的文字滚动的案例,鼠标悬浮可暂停[两种方案任选]
2016/12/01 Javascript
JS控件bootstrap suggest plugin使用方法详解
2017/03/25 Javascript
JavaScript之class继承_动力节点Java学院整理
2017/07/03 Javascript
Vue动态组件实例解析
2017/08/20 Javascript
深入Vue-Router路由嵌套理解
2018/08/13 Javascript
[52:15]2014 DOTA2国际邀请赛中国区预选赛5.21 HGT VS LGD-GAMING
2014/05/23 DOTA
详解Python中find()方法的使用
2015/05/18 Python
开源Web应用框架Django图文教程
2017/03/09 Python
python下载图片实现方法(超简单)
2017/07/21 Python
详解django三种文件下载方式
2018/04/06 Python
利用Python实现在同一网络中的本地文件共享方法
2018/06/04 Python
在Pycharm中将pyinstaller加入External Tools的方法
2019/01/16 Python
pycharm修改界面主题颜色的方法
2019/01/17 Python
Python django框架开发发布会签到系统(web开发)
2020/02/12 Python
美国女士时尚珠宝及配饰购物网站:Icing
2018/07/02 全球购物
给排水工程师岗位职责
2013/11/21 职场文书
司仪主持词两篇
2014/03/22 职场文书
2016中秋节广告语
2016/01/28 职场文书
上帝为你开了一扇窗之Tkinter常用函数详解
2021/06/02 Python
Python torch.flatten()函数案例详解
2021/08/30 Python
《英雄联盟》2022日蚀、月蚀皮肤演示 黑潮亚索曝光
2022/04/13 其他游戏