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基础入门学习笔记(Python环境搭建)
Jan 13 Python
python生成验证码图片代码分享
Jan 28 Python
python list排序的两种方法及实例讲解
Mar 20 Python
Python的IDEL增加清屏功能实例
Jun 19 Python
Python实现简易版的Web服务器(推荐)
Jan 29 Python
Tensorflow使用tfrecord输入数据格式
Jun 19 Python
Python基于sklearn库的分类算法简单应用示例
Jul 09 Python
python多任务及返回值的处理方法
Jan 22 Python
Python基于BeautifulSoup和requests实现的爬虫功能示例
Aug 02 Python
django 装饰器 检测登录状态操作
Jul 02 Python
通过实例简单了解python yield使用方法
Aug 06 Python
用Python 执行cmd命令
Dec 18 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
php google或baidu分页代码
2009/11/26 PHP
PHP中替换换行符的几种方法小结
2012/10/15 PHP
Laravel框架数据库CURD操作、连贯操作总结
2014/09/03 PHP
Yii2汉字转拼音类的实例代码
2017/04/18 PHP
php常用字符串查找函数strstr()与strpos()实例分析
2019/06/21 PHP
巧妙破除网页右键禁用的十大绝招
2006/08/12 Javascript
jquery 学习之二 属性(html()与html(val))
2010/11/25 Javascript
取得窗口大小 兼容所有浏览器的js代码
2011/08/09 Javascript
JS获取地址栏参数的小例子
2013/08/23 Javascript
JS实现鼠标箭头变成一个燃烧烛光效果的方法
2015/02/28 Javascript
jquery中map函数遍历数组用法实例
2015/05/18 Javascript
js点击列表文字对应该行显示背景颜色的实现代码
2015/08/05 Javascript
js实现精确到秒的日期选择器完整实例
2016/04/30 Javascript
BootStrap点击下拉菜单项后显示一个新的输入框实现代码
2016/05/16 Javascript
js精准的倒计时函数分享
2016/06/29 Javascript
JavaScript数组去重由慢到快由繁到简(优化篇)
2016/08/26 Javascript
Map.vue基于百度地图组件重构笔记分享
2017/04/17 Javascript
label+input实现按钮开关切换效果的实例
2017/08/16 Javascript
使用JS实现气泡跟随鼠标移动的动画效果
2017/09/16 Javascript
Jquery cookie插件实现原理代码解析
2020/08/04 jQuery
浅析python 内置字符串处理函数的使用方法
2014/06/11 Python
Python编程之属性和方法实例详解
2015/05/19 Python
tensorflow识别自己手写数字
2018/03/14 Python
tensorflow学习笔记之简单的神经网络训练和测试
2018/04/15 Python
python读取当前目录下的CSV文件数据
2020/03/11 Python
解决python执行较大excel文件openpyxl慢问题
2020/05/15 Python
Python爬虫代理池搭建的方法步骤
2020/09/28 Python
HTML5 device access 设备访问详解
2018/05/24 HTML / CSS
HTML5进度条特效
2014/12/18 HTML / CSS
灵泰克Java笔试题
2016/01/09 面试题
J2EE系统只能是基于web
2015/09/08 面试题
自我鉴定书范文
2013/10/02 职场文书
食堂员工工作职责
2013/12/18 职场文书
网吧最新创业计划书范文
2014/03/27 职场文书
幼儿园中班上学期评语
2014/04/18 职场文书
SQL语句中EXISTS的详细用法大全
2022/06/25 MySQL