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中操作文件之write()方法的使用教程
May 25 Python
Python中一行和多行import模块问题
Apr 01 Python
Python continue继续循环用法总结
Jun 10 Python
djang常用查询SQL语句的使用代码
Feb 15 Python
python实现微信定时每天和女友发送消息
Apr 29 Python
python 3.74 运行import numpy as np 报错lib\site-packages\numpy\__init__.py
Oct 06 Python
基于python3 的百度图片下载器的实现代码
Nov 05 Python
python创建文本文件的简单方法
Aug 30 Python
浅析python中的del用法
Sep 02 Python
python RSA加密的示例
Dec 09 Python
python实现简单文件读写函数
Feb 25 Python
用Python实现屏幕截图详解
Jan 22 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 需要掌握的东西 不做浮躁的人
2009/12/28 PHP
第二章 PHP入门基础之php代码写法
2011/12/30 PHP
php生成静态页面的简单示例
2014/04/17 PHP
php去除字符串中空字符的常用方法小结
2015/03/17 PHP
示例详解Laravel的注册重构
2016/08/14 PHP
php获取POST数据的三种方法实例详解
2016/12/20 PHP
浅谈php(codeigniter)安全性注意事项
2017/04/06 PHP
PHP中快速生成随机密码的几种方式
2017/04/17 PHP
Laravel框架路由设置与使用示例
2018/06/12 PHP
laravel 修改.htaccess文件 重定向public的解决方法
2019/10/12 PHP
Yii框架自定义数据库操作组件示例
2019/11/11 PHP
Dom加载让图片加载完再执行的脚本代码
2008/05/15 Javascript
js下通过prototype扩展实现indexOf的代码
2010/12/08 Javascript
基于jquery的3d效果实现代码
2011/03/23 Javascript
javascript实现完美拖拽效果
2015/05/06 Javascript
JavaScript中的Promise使用详解
2015/06/24 Javascript
学习JavaScript设计模式之装饰者模式
2016/01/19 Javascript
AngularJS入门教程之双向绑定详解
2016/08/18 Javascript
简单分析javascript中的函数
2016/09/10 Javascript
js实现微博发布小功能
2017/01/12 Javascript
jQuery实现Select下拉列表进行状态选择功能
2017/03/30 jQuery
Python struct模块解析
2014/06/12 Python
浅谈Pandas 排序之后索引的问题
2018/06/07 Python
快速解决pandas.read_csv()乱码的问题
2018/06/15 Python
详解Python 正则表达式模块
2018/11/05 Python
学会python自动收发邮件 代替你问候女友
2020/05/20 Python
日本订房网站,预订日本星级酒店/温泉旅馆:Relux(支持中文)
2020/01/03 全球购物
人事助理岗位职责
2013/11/18 职场文书
夏季奶茶店创业计划书
2014/01/16 职场文书
哈弗商学院毕业生求职信
2014/02/26 职场文书
专家推荐信模板
2014/05/09 职场文书
情人节活动总结范文
2015/02/05 职场文书
考教师资格证不要错过的4个最佳时机
2019/07/17 职场文书
css实现两栏布局,左侧固定宽,右侧自适应的多种方法
2021/08/07 HTML / CSS
「月刊Comic Alive」2022年5月号封面公开
2022/03/21 日漫
如何使用注解方式实现 Redis 分布式锁
2022/07/23 Redis