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 相关文章推荐
使用70行Python代码实现一个递归下降解析器的教程
Apr 17 Python
Django的数据模型访问多对多键值的方法
Jul 21 Python
Python基于PycURL自动处理cookie的方法
Jul 25 Python
python:socket传输大文件示例
Jan 18 Python
Python中Threading用法详解
Dec 27 Python
基于Python socket的端口扫描程序实例代码
Feb 09 Python
Python元组及文件核心对象类型详解
Feb 11 Python
python实现电脑自动关机
Jun 20 Python
django删除表重建的实现方法
Aug 28 Python
Pandas聚合运算和分组运算的实现示例
Oct 17 Python
Python如何在main中调用函数内的函数方式
Jun 01 Python
Pytorch DataLoader shuffle验证方式
Jun 02 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冒泡排序算法的深入理解
2013/06/09 PHP
PHP常用算法和数据结构示例(必看篇)
2017/03/15 PHP
JavaScript Event学习第七章 事件属性
2010/02/07 Javascript
Javascript load Page,load css,load js实现代码
2010/03/31 Javascript
5个最佳的Javascript日期处理类库分享
2012/04/15 Javascript
Jquery图片滚动与幻灯片的实例代码
2013/04/08 Javascript
Extjs4 GridPanel的主要配置参数详细介绍
2013/04/18 Javascript
JavaScript中的值类型详细介绍
2014/12/29 Javascript
jQuery统计上传文件大小的方法
2015/01/24 Javascript
jquery对复选框(checkbox)的操作汇总
2016/01/13 Javascript
浅析JavaScript中命名空间namespace模式
2016/06/22 Javascript
Highcharts入门之简介
2016/08/02 Javascript
BootStrap 获得轮播中的索引和当前活动的焦点对象
2017/05/11 Javascript
vue多层嵌套路由实例分析
2019/03/19 Javascript
微信小程序项目总结之记账小程序功能的实现(包括后端)
2019/08/20 Javascript
小程序实现投票进度条
2019/11/20 Javascript
[57:28]2018DOTA2亚洲邀请赛 4.6 淘汰赛 TNC vs Liquid 第一场
2018/04/10 DOTA
天翼开放平台免费短信验证码接口使用实例
2013/12/18 Python
python数据结构之二叉树的建立实例
2014/04/29 Python
配置 Pycharm 默认 Test runner 的图文教程
2018/11/30 Python
解决python打不开文件(文件不存在)的问题
2019/02/18 Python
Python获取时间范围内日期列表和周列表的函数
2019/08/05 Python
Python Django 前后端分离 API的方法
2019/08/28 Python
Tensorflow中批量读取数据的案列分析及TFRecord文件的打包与读取
2020/06/30 Python
Python实现手势识别
2020/10/21 Python
如何用 Python 制作 GitHub 消息助手
2021/02/20 Python
莱德杯高尔夫欧洲官方商店:Ryder Cup Shop
2019/08/14 全球购物
高分子材料与工程专业推荐信
2013/12/01 职场文书
入党积极分子学习党的纲领思想汇报
2014/09/13 职场文书
农业局党的群众路线教育实践活动整改方案
2014/09/20 职场文书
2014年卫生院工作总结
2014/12/03 职场文书
钱学森电影观后感
2015/06/04 职场文书
培根随笔读书笔记
2015/07/01 职场文书
2016年小学“公民道德宣传日”活动总结
2016/04/01 职场文书
新手,如何业余时间安排好写作、提高写作能力?
2019/10/21 职场文书
mysql幻读详解实例以及解决办法
2022/06/16 MySQL