一、利用直方图的方式进行批量的图片缺陷检测(方法简单)
二、步骤(完整代码见最后)
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参数讲解
#直方图计算的函数,反应灰度值的分布情况 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)
其中:
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.zalou.cn/article/184210.htm
OpenCV-Python 直方图-1:查找、绘制和分析|二十六: http://baijiahao.baidu.com/s?id=1655424859576397139&wfr=spider&for=pc 希望帮助能大家理解直方图以及比较函数作用!!!
总结
到此这篇关于python opencv实现图片缺陷检测(讲解直方图以及相关系数对比法)的文章就介绍到这了,更多相关python opencv 缺陷检测内容请搜索ZaLou.Cn以前的文章或继续浏览下面的相关文章希望大家以后多多支持ZaLou.Cn!