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判断、获取一张图片主色调的2个实例
Apr 10 Python
Python字符串拼接的几种方法整理
Aug 02 Python
python矩阵转换为一维数组的实例
Jun 05 Python
django利用request id便于定位及给日志加上request_id
Aug 26 Python
在双python下设置python3为默认的方法
Oct 31 Python
Python小白必备的8个最常用的内置函数(推荐)
Apr 03 Python
windows下安装Python虚拟环境virtualenvwrapper-win
Jun 14 Python
Python实现网页截图(PyQT5)过程解析
Aug 12 Python
ansible动态Inventory主机清单配置遇到的坑
Jan 19 Python
python代码实现TSNE降维数据可视化教程
Feb 28 Python
Python try except异常捕获机制原理解析
Apr 18 Python
django rest framework 自定义返回方式
Jul 12 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实现维护文件代码
2007/06/14 PHP
php 中文和编码判断代码
2010/05/16 PHP
php5.3以后的版本连接sqlserver2000的方法
2014/07/28 PHP
php防止网站被刷新的方法汇总
2014/12/01 PHP
PHP解析RSS的方法
2015/03/05 PHP
php实现指定字符串中查找子字符串的方法
2015/03/17 PHP
PHP编程计算日期间隔天数的方法
2017/04/26 PHP
利用PHPStorm如何开发Laravel应用详解
2017/08/30 PHP
php 多进程编程父进程的阻塞与非阻塞实例分析
2020/02/22 PHP
JS 容错处理代码, 屏蔽错误信息
2021/03/09 Javascript
Prototype1.6 JS 官方下载地址
2007/11/30 Javascript
JavaScript RegExp方法获取地址栏参数(面向对象)
2009/03/10 Javascript
ajax更新数据后,jquery、jq失效问题
2011/03/16 Javascript
如何让DIV可编辑、可拖动示例代码
2013/09/18 Javascript
jquery实现网页的页面平滑滚动效果代码
2015/11/02 Javascript
JS提交form表单实例分析
2015/12/10 Javascript
jQuery进行组件开发完整实例
2015/12/15 Javascript
【经典源码收藏】jQuery实用代码片段(筛选,搜索,样式,清除默认值,多选等)
2016/06/07 Javascript
JS防止网页被嵌入iframe框架的方法分析
2016/09/13 Javascript
js 性能优化之算法和流程控制
2017/02/15 Javascript
vue检测对象和数组的变化分析
2018/06/30 Javascript
vuejs中监听窗口关闭和窗口刷新事件的方法
2018/09/21 Javascript
layui 富文本编辑器和textarea值的相互传递方法
2019/09/18 Javascript
[01:14:30]TNC vs VG 2019国际邀请赛淘汰赛 胜者组赛BO3 第二场 8.20.mp4
2019/08/22 DOTA
Python中标准模块importlib详解
2017/04/16 Python
让你Python到很爽的加速递归函数的装饰器
2019/05/26 Python
Python3 实现文件批量重命名示例代码
2019/06/03 Python
简单了解Python3里的一些新特性
2019/07/13 Python
利用HTML5 Canvas制作键盘及鼠标动画的实例分享
2016/03/15 HTML / CSS
敏捷开发的主要原则都有哪些
2015/04/26 面试题
javascript实现用户必须勾选协议实例讲解
2021/03/24 Javascript
促销活动策划方案
2014/01/12 职场文书
挂靠协议书范本
2014/04/22 职场文书
体育馆的标语
2014/06/24 职场文书
500字小学生检讨书
2015/02/19 职场文书
前端JS获取URL参数的4种方法总结
2022/04/05 Javascript