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 除法小技巧
Sep 06 Python
Python运用于数据分析的简单教程
Mar 27 Python
python: 自动安装缺失库文件的方法
Oct 22 Python
在Pycharm中设置默认自动换行的方法
Jan 16 Python
在Python 中实现图片加框和加字的方法
Jan 26 Python
Python Pexpect库的简单使用方法
Jan 29 Python
python3获取url文件大小示例代码
Sep 18 Python
Python IDE环境之 新版Pycharm安装详细教程
Mar 05 Python
使用Keras实现简单线性回归模型操作
Jun 12 Python
如何利用python进行时间序列分析
Aug 04 Python
如何基于Python按行合并两个txt
Nov 03 Python
python 装饰器重要在哪
Feb 14 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图片等比例缩放生成缩略图函数分享
2014/06/10 PHP
php面向对象与面向过程两种方法给图片添加文字水印
2015/08/26 PHP
PHP指定截取字符串中的中英文或数字字符的实例分享
2016/03/18 PHP
Javascript 同时提交多个Web表单的方法
2009/02/19 Javascript
9个javascript语法高亮插件 推荐
2009/07/18 Javascript
IE、FF浏览器下修改标签透明度
2014/01/28 Javascript
Angular2 (RC5) 路由与导航详解
2016/09/21 Javascript
BootStrap下拉菜单和滚动监听插件实现代码
2016/09/26 Javascript
利用Js的console对象,在控制台打印调式信息测试Js的实现
2016/11/26 Javascript
bootstrap提示标签、提示框实现代码
2016/12/28 Javascript
基于vue2.0+vuex的日期选择组件功能实现
2017/03/13 Javascript
jquery实现点击a链接,跳转之后,该a链接处显示背景色的方法
2018/01/18 jQuery
webpack4 SCSS提取和懒加载的示例
2018/09/03 Javascript
解决Vue在封装了Axios后手动刷新页面拦截器无效的问题
2018/11/08 Javascript
使用vue-cli webpack 快速搭建项目的代码
2018/11/21 Javascript
elementUI Tree 树形控件的官方使用文档
2019/04/25 Javascript
Vue Autocomplete 自动完成功能简单示例
2019/05/25 Javascript
Nodejs 识别图片类型的方法
2019/08/15 NodeJs
[01:11:10]2014 DOTA2华西杯精英邀请赛 5 24 iG VS VG加赛
2014/05/26 DOTA
使用cx_freeze把python打包exe示例
2014/01/24 Python
python使用urllib2提交http post请求的方法
2015/05/26 Python
Python文件如何引入?详解引入Python文件步骤
2018/12/10 Python
python实现浪漫的烟花秀
2019/01/30 Python
Python中dict和set的用法讲解
2019/03/28 Python
Python supervisor强大的进程管理工具的使用
2019/04/24 Python
Pandas库之DataFrame使用的学习笔记
2019/06/21 Python
python提取log文件内容并画出图表
2019/07/08 Python
pandas apply使用多列计算生成新的列实现示例
2021/02/24 Python
世界上最全面的汽车零部件和配件集合:JC Whitney
2016/09/04 全球购物
Banggood官网:面向全球客户的综合商城
2017/04/19 全球购物
Linden Leaves官网:新西兰纯净护肤品
2020/12/20 全球购物
食品营养与检测应届生求职信
2013/11/08 职场文书
2014年两会学习心得范例
2014/03/17 职场文书
本科毕业自我鉴定
2014/03/20 职场文书
让世界充满爱演讲稿
2014/05/24 职场文书
个人收入证明模板
2014/09/18 职场文书