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多进程通信Queue、Pipe、Value、Array实例
Nov 21 Python
Python之父谈Python的未来形式
Jul 01 Python
Python切换pip安装源的方法详解
Nov 18 Python
浅谈配置OpenCV3 + Python3的简易方法(macOS)
Apr 02 Python
浅谈关于Python3中venv虚拟环境
Aug 01 Python
Python 实现某个功能每隔一段时间被执行一次的功能方法
Oct 14 Python
详解Python用户登录接口的方法
Apr 17 Python
在keras里面实现计算f1-score的代码
Jun 15 Python
.img/.hdr格式转.nii格式的操作
Jul 01 Python
matplotlib源码解析标题实现(窗口标题,标题,子图标题不同之间的差异)
Feb 22 Python
用基于python的appium爬取b站直播消费记录
Apr 17 Python
Jupyter notebook 输出部分显示不全的解决方案
Apr 24 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
水质对咖图啡风味的影响具体有哪些
2021/03/03 冲泡冲煮
php模拟js函数unescape的函数代码
2012/10/20 PHP
php使用pdo连接并查询sql数据库的方法
2014/12/24 PHP
对象无length属性时IE6/IE7中无法将其转换成伪数组(ArrayLike)
2011/07/31 Javascript
DWZ table的原生分页浅谈
2013/03/01 Javascript
jQuery渐变发光导航菜单的实例代码
2013/03/27 Javascript
js与jquery获取父元素,删除子元素的两种不同方法
2014/01/09 Javascript
js中键盘事件实例简析
2015/01/10 Javascript
Node.js事件驱动
2015/06/18 Javascript
js实现(全选)多选按钮的方法【附实例】
2016/03/30 Javascript
JavaScript判断是否是微信浏览器
2016/06/13 Javascript
Javascript基础_标记文字的实现方法
2016/06/14 Javascript
Bootstrap实现水平排列的表单
2016/07/04 Javascript
微信小程序 教程之事件
2016/10/18 Javascript
JavaScript中清空数组的三种方式
2017/03/22 Javascript
NodeJS基础API搭建服务器详细过程记录
2017/04/01 NodeJs
webpack4之SplitChunksPlugin使用指南
2018/06/12 Javascript
小程序根据手机机型设置自定义底部导航距离
2019/06/04 Javascript
vue视频播放暂停代码
2019/11/08 Javascript
[01:09]2014DOTA2国际邀请赛 TI4西雅图DOTA2 中国美女coser加油助威
2014/07/20 DOTA
Python 闭包的使用方法
2017/09/07 Python
django上传图片并生成缩略图方法示例
2017/12/11 Python
Python实现简单石头剪刀布游戏
2021/01/20 Python
python SVM 线性分类模型的实现
2019/07/19 Python
python从list列表中选出一个数和其对应的坐标方法
2019/07/20 Python
python爬取王者荣耀全皮肤的简单实现代码
2020/01/31 Python
Node.js 和 Python之间该选择哪个?
2020/08/05 Python
基于python实现简单C/S模式代码实例
2020/09/14 Python
印尼极简主义和实惠的在线家具店:Fabelio
2019/03/27 全球购物
StubHub美国:购买或出售您的门票
2019/07/09 全球购物
生产班组长岗位职责
2014/01/05 职场文书
党员干部公开承诺书范文
2015/04/27 职场文书
2015年法院工作总结范文
2015/04/28 职场文书
2015年团队工作总结范文
2015/05/04 职场文书
清明节随笔
2015/08/15 职场文书
《牧场之国》教学反思
2016/02/22 职场文书