python opencv实现图片缺陷检测(讲解直方图以及相关系数对比法)


Posted in Python onApril 07, 2020

一、利用直方图的方式进行批量的图片缺陷检测(方法简单)

python opencv实现图片缺陷检测(讲解直方图以及相关系数对比法)

二、步骤(完整代码见最后)

2.1灰度转换(将原图和要检测对比的图分开灰度化)

灰度化的作用是因为后面的直方图比较需要以像素256为基准进行相关性比较

img = cv2.imread("0.bmp")
#原图灰度转换
gray = cv2.cvtColor(img, cv2.COLOR_RGB2GRAY)

#循环要检测的图,均灰度化
for i in range(1, 6):
 t1=cv2.cvtColor(cv2.imread(str(i)+".bmp"),cv2.COLOR_RGB2GRAY)

2.2 直方图计算(结果其实是二维的图表--用画图的方式展示)

python opencv实现图片缺陷检测(讲解直方图以及相关系数对比法)

calcHist参数讲解

  • 第一个参数: 必须为列表[],哪怕只有一个图片 ,image输入图像
  • channels::传入图像的通道, 如果是灰度图像,那就不用说了,只有一个通道,值为0 ,如果是彩色图像(有3个通道),那么值为0,1,2,中选择一个,对应着BGR各个通道。这个值也得用[]传入。
  • mask:掩膜图像。 如果统计整幅图,那么为none 。主要是如果要统计部分图的直方图,就得构造相应的炎掩膜来计算。
  • histSize:灰度级的个数, 需要中括号,比如[256]
  • ranges:像素值的范围, 通常[0,256] ,有的图像如果不是0-256,比如说你来回各种变换导致像素值负值、很大,则需要调整后才可以。

 #直方图计算的函数,反应灰度值的分布情况
    hist = cv2.calcHist([gray], [0], None, [256], [0.0,255.0])

    h1 = cv2.calcHist([t1], [0], None, [256], [0.0,255.0])

2.3 相关性比较

cv2.compareHist(H1, H2, method)

其中:

  • H1,H2 分别为要比较图像的直方图
  • method - 比较方式
  • 比较方式(method)
  • 相关性比较 (method=cv.HISTCMP_CORREL) 值越大,相关度越高,最大值为1,最小值为0-----------------------只用一种固然不是很严谨,但这里做示范,把阈值调高也差不多( 取大于等于0.9 )
  • 卡方比较(method=cv.HISTCMP_CHISQR 值越小,相关度越高,最大值无上界,最小值0
  • 巴氏距离比较(method=cv.HISTCMP_BHATTACHARYYA) 值越小,相关度越高,最大值为1,最小值为0
  • #相关性计算,采用相关系数的方式
  •     result = cv2.compareHist(hist,h1,method=cv2.HISTCMP_CORREL)

2.4 展示结果(判断阈值)

相关系数含义参考表

python opencv实现图片缺陷检测(讲解直方图以及相关系数对比法)

im = Image.open(str(i) + ".bmp")

 draw = ImageDraw.Draw(im)
 fnt = ImageFont.truetype(r'C:\Windows\Fonts\simsun.ttc', 30)
 #这里视作》=0.9认为相似,即合格
 if result >=0.9:
  draw.text((5, 10), u'合格', fill='red', font=fnt)
 else:
  draw.text((5, 10), u'不合格', fill='red', font=fnt)
 im.show("result" +str(i) + ".png")

三、完整代码

# -*- coding: UTF-8 -*-
import cv2
from PIL import Image, ImageDraw, ImageFont

img = cv2.imread("0.bmp")
#原图灰度转换
gray = cv2.cvtColor(img, cv2.COLOR_RGB2GRAY)

for i in range(1, 6):
 t1=cv2.cvtColor(cv2.imread(str(i)+".bmp"),cv2.COLOR_RGB2GRAY)

 #直方图计算的函数,反应灰度值的分布情况
 hist = cv2.calcHist([gray], [0], None, [256], [0.0,255.0])

 h1 = cv2.calcHist([t1], [0], None, [256], [0.0,255.0])
 #相关性计算,采用相关系数的方式
 result = cv2.compareHist(hist,h1,method=cv2.HISTCMP_CORREL)
 im = Image.open(str(i) + ".bmp")

 draw = ImageDraw.Draw(im)
 fnt = ImageFont.truetype(r'C:\Windows\Fonts\simsun.ttc', 30)
 #这里视作》=0.9认为相似,即合格
 if result >=0.9:
  draw.text((5, 10), u'合格', fill='red', font=fnt)
 else:
  draw.text((5, 10), u'不合格', fill='red', font=fnt)
 im.show("result" +str(i) + ".png")

参考博文:

Python-Opencv中用compareHist函数进行直方图比较进行对比图片:

https://3water.com/article/184210.htm

OpenCV-Python 直方图-1:查找、绘制和分析|二十六: http://baijiahao.baidu.com/s?id=1655424859576397139&wfr=spider&for=pc
希望帮助能大家理解直方图以及比较函数作用!!!

总结

到此这篇关于python opencv实现图片缺陷检测(讲解直方图以及相关系数对比法)的文章就介绍到这了,更多相关python opencv 缺陷检测内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Python 相关文章推荐
Python version 2.7 required, which was not found in the registry
Aug 26 Python
使用Python脚本和ADB命令实现卸载App
Feb 10 Python
Python3基于sax解析xml操作示例
May 22 Python
python3第三方爬虫库BeautifulSoup4安装教程
Jun 19 Python
Python基于xlrd模块操作Excel的方法示例
Jun 21 Python
python使用 request 发送表单数据操作示例
Sep 25 Python
Python字典常见操作实例小结【定义、添加、删除、遍历】
Oct 25 Python
pyenv虚拟环境管理python多版本和软件库的方法
Dec 26 Python
浅谈在django中使用filter()(即对QuerySet操作)时踩的坑
Mar 31 Python
Python HTMLTestRunner如何下载生成报告
Sep 04 Python
Python操作PostgreSql数据库的方法(基本的增删改查)
Dec 29 Python
python源文件的字符编码知识点详解
Mar 04 Python
解决django无法访问本地static文件(js,css,img)网页里js,cs都加载不了
Apr 07 #Python
Pytest框架之fixture的详细使用教程
Apr 07 #Python
4行Python代码生成图像验证码(2种)
Apr 07 #Python
Django media static外部访问Django中的图片设置教程
Apr 07 #Python
快速解决Django关闭Debug模式无法加载media图片与static静态文件
Apr 07 #Python
Python图片处理模块PIL操作方法(pillow)
Apr 07 #Python
解决Django no such table: django_session的问题
Apr 07 #Python
You might like
php表单提交与$_POST实例分析
2015/01/26 PHP
浅谈javascript 面向对象编程
2009/10/28 Javascript
JQuery中判断一个元素下面是否有内容或者有某个标签的判断代码
2012/02/02 Javascript
解析DHTML,JavaScript,DOM,BOM以及WEB标准的描述
2013/06/19 Javascript
删除select中所有option选项jquery代码
2013/08/12 Javascript
Javascript的闭包详解
2014/12/26 Javascript
分享十五款 jQuery 社交网络分享插件
2015/05/16 Javascript
jquery 重写 ajax提交并判断权限后 使用load方法报错解决方法
2016/01/19 Javascript
jQuery基础_入门必看知识点
2016/07/04 Javascript
AngularJS基础 ng-switch 指令简单示例
2016/08/03 Javascript
第一次动手实现bootstrap table分页效果
2016/09/22 Javascript
JavaScript编写棋盘覆盖代码详解
2017/08/28 Javascript
Angular 数据请求的实现方法
2018/05/07 Javascript
vue数据操作之点击事件实现num加减功能示例
2019/01/19 Javascript
vue-router实现嵌套路由的讲解
2019/01/19 Javascript
jQuery实现动态生成年月日级联下拉列表示例
2019/05/11 jQuery
五分钟搞懂Vuex实用知识(小结)
2019/08/12 Javascript
JS实现移动端在线签协议功能
2019/08/22 Javascript
Vue.js中provide/inject实现响应式数据更新的方法示例
2019/10/16 Javascript
JavaScript设计模式---单例模式详解【四种基本形式】
2020/05/16 Javascript
使用Python脚本来获取Cisco设备信息的示例
2015/05/04 Python
浅谈python字典多键值及重复键值的使用
2016/11/04 Python
Python中defaultdict与lambda表达式用法实例小结
2018/04/09 Python
PyQt5每天必学之像素图控件QPixmap
2018/04/19 Python
python 计算积分图和haar特征的实例代码
2019/11/20 Python
在jupyter notebook中调用.ipynb文件方式
2020/04/14 Python
Python爬取微信小程序通用方法代码实例详解
2020/09/29 Python
CSS3实现伪类hover离开时平滑过渡效果示例
2017/08/10 HTML / CSS
使用javascript和HTML5 Canvas画的四渐变色播放按钮效果
2014/04/10 HTML / CSS
Clarins娇韵诗美国官网:法国天然护肤品牌
2016/09/26 全球购物
小学庆六一活动方案
2014/02/28 职场文书
房屋公证委托书
2014/04/03 职场文书
仓库管理制度范本
2015/08/04 职场文书
导游词之河姆渡遗址博物馆
2019/10/10 职场文书
Redis特殊数据类型bitmap位图
2022/06/01 Redis
阿里云服务器部署RabbitMQ集群的详细教程
2022/06/01 Servers