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


Posted in Python onApril 24, 2021

题目描述

利用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)

运行结果

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

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

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

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

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

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

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

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

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

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

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

问题及解决方法

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 相关文章推荐
python实现网页链接提取的方法分享
Feb 25 Python
python中字典(Dictionary)用法实例详解
May 30 Python
python3.4用函数操作mysql5.7数据库
Jun 23 Python
Python模拟鼠标点击实现方法(将通过实例自动化模拟在360浏览器中自动搜索python)
Aug 23 Python
微信跳一跳python自动代码解读1.0
Jan 12 Python
Python使用Django实现博客系统完整版
Sep 29 Python
Django 项目通过加载不同env文件来区分不同环境
Feb 17 Python
将pytorch转成longtensor的简单方法
Feb 18 Python
python tkinter之 复选、文本、下拉的实现
Mar 04 Python
Python新手如何进行闭包时绑定变量操作
May 29 Python
python代码能做成软件吗
Jul 24 Python
Django如何创作一个简单的最小程序
May 12 Python
解决jupyter notebook启动后没有token的坑
numpy数据类型dtype转换实现
Apr 24 #Python
解决python存数据库速度太慢的问题
Apr 23 #Python
python实战之90行代码写个猜数字游戏
Apr 22 #Python
python实战之一步一步教你绘制小猪佩奇
Apr 22 #Python
python 破解加密zip文件的密码
python入门之算法学习
Apr 22 #Python
You might like
我常用的几个类
2006/10/09 PHP
PHP 高手之路(二)
2006/10/09 PHP
PHP中new static()与new self()的区别异同分析
2014/08/22 PHP
php微信支付之APP支付方法
2015/03/04 PHP
JavaScript this 深入理解
2009/07/30 Javascript
JQuery解析HTML、JSON和XML实例详解
2014/03/29 Javascript
网页运行时提示对象不支持abigimage属性或方法
2014/08/10 Javascript
javascript 自定义回调函数示例代码
2014/09/26 Javascript
推荐10个2014年最佳的jQuery视频插件
2014/11/12 Javascript
JavaScript判断是否为数组的3种方法及效率比较
2015/04/01 Javascript
javascript使用shift+click实现选择和反选checkbox的方法
2015/05/04 Javascript
JavaScript中数组添加值和访问值常见问题
2016/02/06 Javascript
浅析jQuery事件之on()方法绑定多个选择器,多个事件
2016/04/27 Javascript
jQuery选择器实例应用
2017/01/05 Javascript
JS中的phototype详解
2017/02/04 Javascript
vue实现商城上货组件简易版
2017/11/27 Javascript
vue组件实现移动端九宫格转盘抽奖
2020/10/16 Javascript
使用Python进行新浪微博的mid和url互相转换实例(10进制和62进制互算)
2014/04/25 Python
Python实现的监测服务器硬盘使用率脚本分享
2014/11/07 Python
Python while、for、生成器、列表推导等语句的执行效率测试
2015/06/03 Python
ansible作为python模块库使用的方法实例
2017/01/17 Python
老生常谈Python之装饰器、迭代器和生成器
2017/07/26 Python
python字符串常用方法
2018/06/14 Python
Python利用递归实现文件的复制方法
2018/10/27 Python
python修改文件内容的3种方法详解
2019/11/15 Python
python循环嵌套的多种使用方法解析
2019/11/29 Python
Django自定义列表 models字段显示方式
2020/04/03 Python
基于Python脚本实现邮件报警功能
2020/05/20 Python
css3和jquery实现的可折叠导航菜单适合放在手机网页的导航菜单
2014/09/02 HTML / CSS
意大利文具和办公产品在线商店:Y-Office
2020/02/27 全球购物
物流仓储实习自我鉴定
2013/09/25 职场文书
英文自荐信
2013/12/15 职场文书
计划生育宣传标语
2014/06/21 职场文书
2014领导班子四风问题对照检查材料思想汇报
2014/09/21 职场文书
pytorch 预训练模型读取修改相关参数的填坑问题
2021/06/05 Python