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抓取网页图片示例(python爬虫)
Apr 27 Python
采用Psyco实现python执行速度提高到与编译语言一样的水平
Oct 11 Python
简单介绍Python中的JSON模块
Apr 08 Python
Python实现的径向基(RBF)神经网络示例
Feb 06 Python
python pandas 组内排序、单组排序、标号的实例
Apr 12 Python
JavaScript实现一维数组转化为二维数组
Apr 17 Python
使用python画个小猪佩奇的示例代码
Jun 06 Python
python使用zip将list转为json的方法
Dec 31 Python
python for和else语句趣谈
Jul 02 Python
python 命名规范知识点汇总
Feb 14 Python
django在开发中取消外键约束的实现
May 20 Python
python数字类型和占位符详情
Mar 13 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 定义404页面的实现代码
2012/11/19 PHP
php无限极分类递归排序实现方法
2014/11/11 PHP
PHP使用NuSOAP调用Web服务的方法
2015/07/18 PHP
PHP加密技术的简单实现
2016/09/04 PHP
PHP中16个高危函数整理
2019/09/19 PHP
laravel高级的Join语法详解以及使用Join多个条件
2019/10/16 PHP
简单实用的js调试logger组件实现代码
2010/11/20 Javascript
jquery的冒泡事件的阻止与允许(三种实现方法)
2013/02/01 Javascript
js 有框架页面跳转(target)三种情况下的应用
2013/04/09 Javascript
用jquery存取照片的具体实现方法
2013/06/30 Javascript
9行javascript代码获取QQ群成员具体实现
2013/10/16 Javascript
JavaScript中的分号插入机制详细介绍
2015/02/11 Javascript
JavaScript实现向OL列表内动态添加LI元素的方法
2015/03/21 Javascript
jQuery编程中的一些核心方法简介
2015/08/14 Javascript
实例讲解jquery与json的结合
2016/01/07 Javascript
VUE开发一个图片轮播的组件示例代码
2017/03/06 Javascript
非常实用的vue导航钩子
2017/03/20 Javascript
vue中的router-view组件的使用教程
2018/10/23 Javascript
javascript中一些奇葩的日期换算方法总结
2018/11/14 Javascript
Angular使用Restful的增删改
2018/12/28 Javascript
vue指令之表单控件绑定v-model v-model与v-bind结合使用
2019/04/17 Javascript
JavaScript解析JSON数据示例
2019/07/16 Javascript
Vue2.0 $set()的正确使用详解
2020/07/28 Javascript
vant时间控件使用方法详解
2020/12/24 Javascript
django_orm查询性能优化方法
2018/08/20 Python
python实现三次样条插值
2018/12/17 Python
Python基本数据结构与用法详解【列表、元组、集合、字典】
2019/03/23 Python
Jacobi迭代算法的Python实现详解
2019/06/29 Python
Elemis美国官网:英国的第一豪华护肤品牌
2018/03/15 全球购物
加利福尼亚州威尼斯的女性奢侈品设计师服装和概念店:Mona Moore
2018/09/13 全球购物
酒店管理专业毕业生推荐信
2013/11/10 职场文书
安全员岗位职责
2013/11/11 职场文书
化工专业大学生职业生涯规划书
2014/01/14 职场文书
pytorch--之halfTensor的使用详解
2021/05/24 Python
Python爬取英雄联盟MSI直播间弹幕并生成词云图
2021/06/01 Python
微信小程序APP的生命周期及页面的生命周期
2022/04/19 Javascript