python opencv实现图片缺陷检测(讲解直方图以及相关系数对比法)

 更新时间:2020年04月07日 10:11:42   作者:宇~  
这篇文章主要介绍了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 直方图计算(结果其实是二维的图表--用画图的方式展示)

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 展示结果(判断阈值)

相关系数含义参考表

 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://www.jb51.net/article/184210.htm

OpenCV-Python 直方图-1:查找、绘制和分析|二十六: http://baijiahao.baidu.com/s?id=1655424859576397139&wfr=spider&for=pc
希望帮助能大家理解直方图以及比较函数作用!!!

总结

到此这篇关于python opencv实现图片缺陷检测(讲解直方图以及相关系数对比法)的文章就介绍到这了,更多相关python opencv 缺陷检测内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Python pyecharts实现绘制中国地图的实例详解

    Python pyecharts实现绘制中国地图的实例详解

    pyecharts是一个用于生成 Echarts 图表的类库。Echarts 是百度开源的一个数据可视化 JS 库。用 Echarts 生成的图可视化效果非常棒。本文将通过pyecharts绘制中国地图,需要的可以学习一下
    2022-01-01
  • python文件名和文件路径操作实例

    python文件名和文件路径操作实例

    下面小编就为大家带来一篇python文件名和文件路径操作实例。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-09-09
  • Python编程实现二分法和牛顿迭代法求平方根代码

    Python编程实现二分法和牛顿迭代法求平方根代码

    这篇文章主要介绍了Python编程实现二分法和牛顿迭代法求平方根代码,具有一定参考价值,需要的朋友可以了解下。
    2017-12-12
  • 使用python模块plotdigitizer抠取论文图片中的数据实例详解

    使用python模块plotdigitizer抠取论文图片中的数据实例详解

    这篇文章主要介绍了使用python模块plotdigitizer抠取论文图片中的数据,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-03-03
  • Python中取整的几种方法小结

    Python中取整的几种方法小结

    这篇文章主要介绍了Python中取整的几种方法,其中包括向下取整、四舍五入取整、向上取整以及分别取整数部分和小数部分。分别都给出了示例代码,相信对大家的理解和学习具有一定的参考借鉴价值,需要的朋友可以参考借鉴。
    2017-01-01
  • python微信公众号之关键词自动回复

    python微信公众号之关键词自动回复

    这篇文章主要为大家详细介绍了python微信公众号之关键词自动回复,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-06-06
  • Python远程视频监控程序的实例代码

    Python远程视频监控程序的实例代码

    这篇文章主要介绍了Python远程视频监控程序的实例代码,需要的朋友可以参考下
    2019-05-05
  • Python命令行参数化的四种方式详解

    Python命令行参数化的四种方式详解

    在日常编写 Python 脚本的过程中,我们经常需要结合命令行参数传入一些变量参数,使项目使用更加的灵活方便。本文章罗列了构建 Python命令行参数的4种常见方式,需要的可以参考一下
    2022-06-06
  • PID原理与python的简单实现和调参

    PID原理与python的简单实现和调参

    这篇文章主要介绍了PID原理与python的简单实现和调参文章围绕主题展开详细的内容介绍,具有一定的参考价值。感兴趣的小伙伴可以参考一下
    2022-08-08
  • Python中的Broadcast机制

    Python中的Broadcast机制

    这篇文章主要介绍了Python中的Broadcast机制,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-06-06

最新评论