pythonopencv实现图⽚缺陷检测(讲解直⽅图以及相关
系数对⽐法)特此函告
⼀、利⽤直⽅图的⽅式进⾏批量的图⽚缺陷检测(⽅法简单)
⼆、步骤(完整代码见最后)
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 相关性⽐较
其中:
H1,H2 分别为要⽐较图像的直⽅图
method - ⽐较⽅式
⽐较⽅式(method)
鲁滨逊漂流记书相关性⽐较 (method=cv.HISTCMP_CORREL) 值越⼤,相关度越⾼,最⼤值为1,最⼩值为0-----------------------只⽤⼀种固然不是很严谨,但这⾥做⽰范,把阈值调⾼也差不多(取⼤于等于0.9 )
卡⽅⽐较(method=cv.HISTCMP_CHISQR 值越⼩,相关度越⾼,最⼤值⽆上界,最⼩值0
巴⽒距离⽐较(method=cv.HISTCMP_BHATTACHARYYA) 值越⼩,相关度越⾼,最⼤值为1,最⼩值为0
#相关性计算,采⽤相关系数的⽅式
潘子健
result = pareHist(hist,h1,method=cv2.HISTCMP_CORREL)
2.4 展⽰结果(判断阈值)
相关系数含义参考表
im = Image.open(str(i) + ".bmp")
draw = ImageDraw.Draw(im)
苔的古诗
fnt = uetype(r'C:\Windows\', 30)
#这⾥视作》=0.9认为相似,即合格
if result >=0.9:
<((5, 10), u'合格', fill='red', font=fnt)
el:
<((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 = pareHist(hist,h1,method=cv2.HISTCMP_CORREL)
im = Image.open(str(i) + ".bmp")
draw = ImageDraw.Draw(im)
fnt = uetype(r'C:\Windows\', 30)
#这⾥视作》=0.9认为相似,即合格
if result >=0.9:
<((5, 10), u'合格', fill='red', font=fnt)
el:脂肪肝喝什么茶
<((5, 10), u'不合格', fill='red', font=fnt)
im.show("result" +str(i) + ".png")
参考博⽂:
Python-Opencv中⽤compareHist函数进⾏直⽅图⽐较进⾏对⽐图⽚:
总结
刘炳森书法
到此这篇关于python opencv实现图⽚缺陷检测(讲解直⽅图以及相关系数对⽐法)的⽂章就介绍到这了,更多相关python opencv 缺陷检测内容请搜索以前的⽂章或继续浏览下⾯的相关⽂章希望⼤家以后多多⽀持!