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实现批量下载文件
May 17 Python
深入解析Python中的上下文管理器
Jun 28 Python
Unicode和Python的中文处理
Mar 19 Python
python统计多维数组的行数和列数实例
Jun 23 Python
Python SMTP发送邮件遇到的一些问题及解决办法
Oct 24 Python
Python处理时间日期坐标轴过程详解
Jun 25 Python
python pycharm的安装及其使用
Oct 11 Python
使用TensorFlow搭建一个全连接神经网络教程
Feb 06 Python
python字符串下标与切片及使用方法
Feb 13 Python
python tkinter 设置窗口大小不可缩放实例
Mar 04 Python
PyCharm上安装Package的实现(以pandas为例)
Sep 18 Python
实战Python爬虫爬取酷我音乐
Apr 11 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 session应用实例 登录验证
2009/03/16 PHP
CI框架中集成CKEditor编辑器的教程
2014/06/09 PHP
PHP编写RESTful接口
2016/02/23 PHP
PHP微信H5支付开发实例
2018/07/25 PHP
js 页面关闭前的出现提示的实现代码
2011/05/25 Javascript
Jquery同辈元素选中/未选中效果的实例代码
2013/08/01 Javascript
兼容主流浏览器的iframe自适应高度js脚本
2014/01/10 Javascript
jQuery+css3动画属性制作猎豹浏览器宽屏banner焦点图
2015/03/16 Javascript
jQuery遮罩层效果实例分析
2016/01/14 Javascript
js操作DOM--添加、删除节点的简单实例
2016/07/08 Javascript
JS实现动态添加DOM节点和事件的方法示例
2017/04/28 Javascript
jQuery插件ImgAreaSelect实现头像上传预览和裁剪功能实例讲解一
2017/05/26 jQuery
EasyUI Tree树组件无限循环的解决方法
2017/09/27 Javascript
jQuery实现鼠标响应式透明度渐变动画效果示例
2018/02/13 jQuery
如何以Angular的姿势打开Font-Awesome详解
2018/04/22 Javascript
JavaScript中变量提升与函数提升经典实例分析
2018/07/26 Javascript
一些可能会用到的Node.js面试题
2019/06/15 Javascript
Node.js API详解之 tty功能与用法实例分析
2020/04/27 Javascript
javascript实现文字跑马灯效果
2020/06/18 Javascript
国内常用的js类库大全(CDN公共库)
2020/06/24 Javascript
Vue过滤器,生命周期函数和vue-resource简单介绍
2021/01/12 Vue.js
[00:49]完美世界DOTA2联赛10月28日开团时刻:随便打
2020/10/29 DOTA
对Tensorflow中的矩阵运算函数详解
2018/07/27 Python
python实现身份证实名认证的方法实例
2019/11/08 Python
在 Windows 下搭建高效的 django 开发环境的详细教程
2020/07/27 Python
Python制作数据预测集成工具(值得收藏)
2020/08/21 Python
Python批量修改xml的坐标值全部转为整数的实例代码
2020/11/26 Python
Pycharm 跳转回之前所在页面的操作
2021/02/05 Python
深入解析HTML5 Canvas控制图形矩阵变换的方法
2016/03/24 HTML / CSS
请描述一下”is a”关系和”has a”关系
2015/02/03 面试题
学年个人总结范文
2015/03/05 职场文书
忠犬八公的故事观后感
2015/06/05 职场文书
2016年世界人口日宣传活动总结
2016/04/05 职场文书
实用干货:敬酒词大全,帮你应付各种场合
2019/11/21 职场文书
如何用python识别滑块验证码中的缺口
2021/04/01 Python
Java基础之详解HashSet的使用方法
2021/06/30 Java/Android