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连接oracle数据库实例
Oct 17 Python
Python缩进和冒号详解
Jun 01 Python
python分治法求二维数组局部峰值方法
Apr 03 Python
python正则表达式之对号入座篇
Jul 24 Python
实例分析python3实现并发访问水平切分表
Sep 29 Python
Python数据结构之栈、队列及二叉树定义与用法浅析
Dec 27 Python
pycharm访问mysql数据库的方法步骤
Jun 18 Python
opencv-python 读取图像并转换颜色空间实例
Dec 09 Python
Python udp网络程序实现发送、接收数据功能示例
Dec 09 Python
Pycharm 2020最新永久激活码(附最新激活码和插件)
Sep 17 Python
python如何写try语句
Jul 14 Python
Python3 用什么IDE开发工具比较好
Nov 28 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 filter_var() 函数 Filter 函数
2012/04/25 PHP
解析mysql 表中的碎片产生原因以及清理
2013/06/22 PHP
php检测数组长度函数sizeof与count用法
2014/11/17 PHP
PHP网页缓存技术优点及代码实例
2020/07/29 PHP
JavaScript CSS修改学习第六章 拖拽
2010/02/19 Javascript
JavaScript基础篇之变量作用域、传值、传址的简单介绍与实例
2013/06/29 Javascript
谈谈JavaScript自定义回调函数
2015/10/18 Javascript
Angularjs中UI Router的使用方法
2016/05/14 Javascript
AngularJS中指令的四种基本形式实例分析
2016/11/22 Javascript
获取当前月(季度/年)的最后一天(set相关操作及应用)
2016/12/27 Javascript
原生JS+Canvas实现五子棋游戏实例
2017/06/19 Javascript
JavaScript中各数制转换全面总结
2017/08/21 Javascript
从Vuex中取出数组赋值给新的数组,新数组push时报错的解决方法
2018/09/18 Javascript
JS字典Dictionary类定义与用法示例
2019/02/01 Javascript
Nuxt配置Element-UI按需引入的操作方法
2020/07/06 Javascript
Python发送Email方法实例
2014/08/21 Python
跟老齐学Python之字典,你还记得吗?
2014/09/20 Python
介绍Python中内置的itertools模块
2015/04/29 Python
python cx_Oracle模块的安装和使用详细介绍
2017/02/13 Python
Django2.1集成xadmin管理后台所遇到的错误集锦(填坑)
2018/12/20 Python
python二进制文件的转译详解
2019/07/03 Python
Django 创建新App及其常用命令的实现方法
2019/08/04 Python
pip 安装库比较慢的解决方法(国内镜像)
2019/10/06 Python
详解Python GUI编程之PyQt5入门到实战
2020/12/10 Python
详解matplotlib绘图样式(style)初探
2021/02/03 Python
使用HTML5 Canvas API绘制弧线的教程
2016/03/22 HTML / CSS
柏林通行证:Berlin Pass
2018/04/11 全球购物
英国乡村时尚和宠物用品专家:Pet & Country
2018/07/02 全球购物
优秀的计算机专业求职信范文
2013/12/27 职场文书
人资专员岗位职责
2014/04/04 职场文书
优秀家长事迹材料
2014/05/17 职场文书
优秀团干部个人事迹
2014/05/29 职场文书
小组名称和口号
2014/06/09 职场文书
音乐教育专业自荐信
2014/09/18 职场文书
《妈妈别哭,有我在》读后感3篇
2020/01/13 职场文书
Vue3如何理解ref toRef和toRefs的区别
2022/02/18 Vue.js