• 企业400电话
  • 微网小程序
  • AI电话机器人
  • 电商代运营
  • 全 部 栏 目

    企业400电话 网络优化推广 AI电话机器人 呼叫中心 网站建设 商标✡知产 微网小程序 电商运营 彩铃•短信 增值拓展业务
    Python opencv缺陷检测的实现及问题解决

    题目描述

    利用opencv或其他工具编写程序实现缺陷检测。

    实现过程

    # -*- coding: utf-8 -*-
    '''
    作者 : 丁毅
    开发时间 : 2021/4/21 15:30
    '''
    import cv2
    import numpy as np
    from PIL import Image, ImageDraw, ImageFont
    import matplotlib.pyplot as plt
    
    
    #用于给图片添加中文字符的函数
    def cv2ImgAddText(img, text, left, top, textColor=(0, 255, 0), textSize=20):
        # 判断是否OpenCV图片类型
        if (isinstance(img, np.ndarray)):
            img = Image.fromarray(cv2.cvtColor(img, cv2.COLOR_BGR2RGB))
        # 创建一个可以在给定图像上绘图的对象
        draw = ImageDraw.Draw(img)
        # 字体的格式
        fontStyle=ImageFont.truetype("font/simsun.ttc",textSize, encoding="utf-8")
        # 绘制文本
        draw.text((left, top), text, textColor, font=fontStyle)
        # 转换回OpenCV格式
        return cv2.cvtColor(np.asarray(img), cv2.COLOR_RGB2BGR)
    
    # plt绘图显示中文
    plt.rcParams['font.family'] = 'SimHei'
    img0 = cv2.imread(r"C:\Users\pc\Desktop\0.bmp")
    cv2.imshow('img', img0)
    # 彩色图转灰度图
    img1 = cv2.cvtColor(img0, cv2.COLOR_BGR2GRAY)
    
    # 缺陷检测
    for i in range(1, 6):
        defect_img0 = cv2.imread(r"C:\Users\pc\Desktop\%d.bmp"%i)
        # 获取灰度图像
        defect_img1 = cv2.cvtColor(defect_img0, cv2.COLOR_BGR2GRAY)
        # 获取原图像的灰度直方图
        hist0 = cv2.calcHist([img1], [0], None, [256], [0.0, 255.0])
        # 获取待检测图像的灰度直方图
        hist1 = cv2.calcHist([defect_img1], [0], None, [256], [0.0, 255.0])
        # 为图像添加标题
        plt.title("原图与待检测img%d对比"%i)
        # 添加图例
        plt.plot(hist0, label='原图')
        plt.plot(hist1, label='待检测img%d'%i)
        # 相似度比较
        rst = cv2.compareHist(hist0, hist1, method=cv2.HISTCMP_CORREL)
        # res >= 0.95即认为合格
        cv2.imshow(str(i) + ".img", cv2ImgAddText(defect_img0, "合格" if rst >= 0.95 else "不合格", 20, 20, (255, 0, 0), 25))
        # 设置x轴的数值范围
        plt.xlim([0, 256])
        plt.legend(loc='upper left')
        plt.show()
    cv2.waitKey(0)
    

    运行结果










    问题及解决方法

    1.获取原图的直方图

    参考链接
    方式:
    cv2.calcHist(images, channels, mask, histSize, ranges[, hist[, accumulate ]])

    images:输入的图像channels:选择图像的通道mask:是一个大小和image一样的np数组,其中把需要处理的部分指定为1,不需要处理的部分指定为0,一般设置为None,表示处理整幅图像。histSize:使用多少个bin(柱子),一般为256ranges:像素值的范围,一般为[0,255]表示0~255

    该函数结果返回一个二维数组,该数组反应画面中亮度的分布和比例。

    2.比较两个直方图的相似度
    参考链接
    方式:
    cv2.compareHist(H1, H2, method)

    H1:第一个直方图数组H2:第二个直方图数组(与第一个纬度相同)method:所使用的方式

    该函数返回一个[0,1]的相似度值,值越接近一就表名相似度越高。

    3.相似度参数微调
    由于compareHist函数返回一个[0,1]的值,需要自己调整一个阈值来选取哪些合格,经过调整后,发现阈值取[0.90, 0.95]能够正确选取与实验的结果,代码中取的是0.95,即待检测图与原图之间的相似度如果小于0.95则不合格。

    4.通过plot显示原图与待检测图的关系折线
    参考链接
    通过calcHist函数返回的hist数组值,运用matplotlib绘制原图和待检测图之间的关系折线图。对比两个曲线的差异。

    到此这篇关于Python opencv缺陷检测的实现的文章就介绍到这了,更多相关opencv缺陷检测内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

    您可能感兴趣的文章:
    • python opencv实现图片缺陷检测(讲解直方图以及相关系数对比法)
    • Python-OpenCV实现图像缺陷检测的实例
    上一篇:解决jupyter notebook启动后没有token的坑
    下一篇:Jupyter notebook 输出部分显示不全的解决方案
  • 相关文章
  • 

    © 2016-2020 巨人网络通讯 版权所有

    《增值电信业务经营许可证》 苏ICP备15040257号-8

    Python opencv缺陷检测的实现及问题解决 Python,opencv,缺陷,检测,的,