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

作者:宇~ 时间:2021-02-03 19:41:24 

一、利用直方图的方式进行批量的图片缺陷检测(方法简单)

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

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

来源:http://www.cnblogs.com/cybg/p/12642030.html

标签:python,opencv,缺陷检测
0
投稿

猜你喜欢

  • CentOS7环境下源码安装MySQL5.7的方法

    2024-01-26 04:38:56
  • Pygame transform模块入门介绍

    2023-11-27 11:31:03
  • jupyter notebook快速入门及使用详解

    2023-07-17 07:48:57
  • JavaScript中const、var和let区别浅析

    2024-05-09 15:03:15
  • C#中把FastReport.Net报表控件的数据保存到数据库

    2024-01-20 12:07:18
  • Python闭包思想与用法浅析

    2021-08-13 03:54:54
  • Python中的复制操作及copy模块中的浅拷贝与深拷贝方法

    2023-08-18 14:38:24
  • Django 实现xadmin后台菜单改为中文

    2021-12-28 10:31:49
  • 解决pytorch trainloader遇到的多进程问题

    2023-02-22 13:46:59
  • XML的简单读取与写入

    2008-09-04 10:35:00
  • 有感用户体验规划与系统实现

    2009-11-27 18:33:00
  • 在任意字符集下正常显示网页的方法二(续)

    2023-11-22 17:36:14
  • MYSQL建立外键失败几种情况记录Can't create table不能创建表

    2024-01-22 19:57:22
  • java EJB 加密与解密原理的一个例子

    2023-10-02 06:41:16
  • 如何通过python检查文件是否被占用

    2023-03-20 12:25:00
  • python 双循环遍历list 变量判断代码

    2021-02-10 12:38:12
  • C#操作数据库总结(vs2005+sql2005)

    2024-01-20 22:20:29
  • 如何使用python的ctypes调用医保中心的dll动态库下载医保中心的账单

    2022-08-02 13:14:35
  • Django在Model保存前记录日志实例

    2023-10-05 03:01:29
  • python DataFrame 修改列的顺序实例

    2023-07-21 12:55:40
  • asp之家 网络编程 m.aspxhome.com