python opencv 图片缺陷检测!

时间:2020-04-07 14:25:39   收藏:0   阅读:166

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

技术分享图片

二、步骤(完整代码见最后)

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)

其中:

#相关性计算,采用相关系数的方式
    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")

源码加群:850591259

 

原文:https://www.cnblogs.com/Py1233/p/12653118.html

评论(0
© 2014 bubuko.com 版权所有 - 联系我们:wmxa8@hotmail.com
打开技术之扣,分享程序人生!