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实现每次处理一个字符的三种方法
Oct 09 Python
在GitHub Pages上使用Pelican搭建博客的教程
Apr 25 Python
利用Python脚本生成sitemap.xml的实现方法
Jan 31 Python
python按综合、销量排序抓取100页的淘宝商品列表信息
Feb 24 Python
对python内置map和six.moves.map的区别详解
Dec 19 Python
解决Python3 被PHP程序调用执行返回乱码的问题
Feb 16 Python
python Tkinter的图片刷新实例
Jun 14 Python
opencv设置采集视频分辨率方式
Dec 10 Python
基于numpy中的expand_dims函数用法
Dec 18 Python
python中编写函数并调用的知识点总结
Jan 13 Python
Python开发工具Pycharm的安装以及使用步骤总结
Jun 24 Python
Python3中最常用的5种线程锁实例总结
Jul 07 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遍历文件夹与子目录的函数代码
2011/09/26 PHP
PHP中全面阻止SQL注入式攻击分析小结
2012/01/30 PHP
PHP静态文件生成类实例
2014/11/29 PHP
php根据日期或时间戳获取星座信息和生肖等信息
2015/10/20 PHP
Jquery 类网页微信二维码图块滚动效果具体实现
2013/10/14 Javascript
js实现div弹出层的方法
2014/11/20 Javascript
JQuery中使用on方法绑定hover事件实例
2014/12/09 Javascript
SuperSlide标签切换、焦点图多种组合插件
2015/03/14 Javascript
JS+CSS实现六级网站导航主菜单效果
2015/09/28 Javascript
js和jquery分别验证单选框、复选框、下拉框
2015/12/17 Javascript
JS+Canvas 实现下雨下雪效果
2016/05/18 Javascript
AngularJS的依赖注入实例分析(使用module和injector)
2017/01/19 Javascript
input type=file 选择图片并且实现预览效果的实例
2017/10/26 Javascript
vue实现搜索功能
2019/05/28 Javascript
对Layer UI 模块化的用法详解
2019/09/26 Javascript
jQuery+ajax实现用户登录验证
2020/09/13 jQuery
微信小程序实现页面左右滑动
2020/11/16 Javascript
[14:19]2018年度COSER大赛-完美盛典
2018/12/16 DOTA
Python中list列表的一些进阶使用方法介绍
2015/08/15 Python
Python计算开方、立方、圆周率,精确到小数点后任意位的方法
2018/07/17 Python
django组合搜索实现过程详解(附代码)
2019/08/06 Python
Python tkinter常用操作代码实例
2020/01/03 Python
python如何通过pyqt5实现进度条
2020/01/20 Python
茵宝(Umbro)英国官方商店:英国足球服装生产商
2016/12/29 全球购物
MIKI HOUSE美国官方网上商店:日本领先的婴儿和儿童高级时装品牌
2020/06/21 全球购物
OSPF有什么优点?为什么OSPF比RIP收敛快?
2013/02/13 面试题
linux面试题参考答案(11)
2012/05/01 面试题
环境工程与管理大学毕业生求职信
2013/10/02 职场文书
产品促销活动策划书
2014/01/15 职场文书
教师旷工检讨书
2014/01/18 职场文书
车间安全生产标语
2014/06/06 职场文书
欢迎领导检查标语
2014/06/27 职场文书
办公室班子四风问题对照检查材料
2014/10/04 职场文书
实习介绍信模板
2015/01/30 职场文书
小班教师个人总结
2015/02/05 职场文书
毕业生党员个人总结
2015/02/14 职场文书