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中文问题解决方法(总结了多位前人经验,初学者必看)
Mar 13 Python
python局域网ip扫描示例分享
Apr 03 Python
wxPython事件驱动实例详解
Sep 28 Python
用Python生成器实现微线程编程的教程
Apr 13 Python
python算法演练_One Rule 算法(详解)
May 17 Python
pyhton列表转换为数组的实例
Apr 04 Python
python字符串循环左移
Mar 08 Python
python添加菜单图文讲解
Jun 04 Python
Win10里python3创建虚拟环境的步骤
Jan 31 Python
Django调用支付宝接口代码实例详解
Apr 04 Python
Python设计密码强度校验程序
Jul 30 Python
python opencv将多个图放在一个窗口的实例详解
Feb 28 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
PHP5 面向对象(学习记录)
2009/12/02 PHP
WordPress主题制作中自定义头部的相关PHP函数解析
2016/01/08 PHP
简单谈谈PHP中的trait
2017/02/25 PHP
PHP实现的策略模式简单示例
2017/08/25 PHP
如何用javascript去掉字符串里的所有空格
2007/02/08 Javascript
javascript 学习之旅 (2)
2009/02/05 Javascript
JavaScript 继承详解 第一篇
2009/08/30 Javascript
再谈ie和firefox下的document.all属性
2009/10/21 Javascript
javascript 跨浏览器开发经验总结(五) js 事件
2010/05/19 Javascript
Javascript 面向对象编程(coolshell)
2012/03/18 Javascript
将两个div左右并列显示并实现点击标题切换内容
2013/10/22 Javascript
图片翻转效果具体实现代码
2014/01/09 Javascript
jquery选择器之层级过滤选择器详解
2014/01/27 Javascript
JavaScript中的6种运算符总结
2014/10/16 Javascript
有关easyui-layout中的收缩层无法显示标题的解决办法
2016/05/10 Javascript
jQuery插件 Jqplot图表实例
2016/06/18 Javascript
jQuery Easyui Tabs扩展根据自定义属性打开页签
2016/08/15 Javascript
jquery 实时监听输入框值变化的完美方法(必看)
2017/01/26 Javascript
基于JS实现仿京东搜索栏随滑动透明度渐变效果
2017/07/10 Javascript
react高阶组件经典应用之权限控制详解
2017/09/07 Javascript
javascript与PHP动态往类中添加方法对比
2018/03/21 Javascript
Django模板继承 extend标签实例代码详解
2019/05/16 Javascript
js数据类型转换与流程控制操作实例分析
2019/12/18 Javascript
关于windows下Tensorflow和pytorch安装教程
2020/02/04 Python
数以千计的折扣工业产品:ESE Direct
2018/05/20 全球购物
EQVVS官网:设计师男装和女装
2018/10/24 全球购物
自荐信要包含哪些内容
2013/11/06 职场文书
学生会招新策划书
2014/02/14 职场文书
行政部岗位职责范本
2014/03/13 职场文书
不拖欠农民工工资承诺书
2014/03/31 职场文书
工地质量标语
2014/06/12 职场文书
2015年世界环境日活动方案
2015/05/05 职场文书
全家福照片寄语怎么写?
2019/04/02 职场文书
python源码剖析之PyObject详解
2021/05/18 Python
使用redis生成唯一编号及原理示例详解
2021/09/15 Redis
vue递归实现树形组件
2022/07/15 Vue.js