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 相关文章推荐
仅用50行Python代码实现一个简单的代理服务器
Apr 08 Python
详解Python中__str__和__repr__方法的区别
Apr 17 Python
基于python实现的抓取腾讯视频所有电影的爬虫
Apr 22 Python
python使用super()出现错误解决办法
Aug 14 Python
Python科学计算包numpy用法实例详解
Feb 08 Python
目前最全的python的就业方向
Jun 05 Python
python复制列表时[:]和[::]之间有什么区别
Oct 16 Python
Python字符串的一些操作方法总结
Jun 10 Python
python使用多线程编写tcp客户端程序
Sep 02 Python
基于python3.7利用Motor来异步读写Mongodb提高效率(推荐)
Apr 29 Python
完美解决jupyter由于无法import新包的问题
May 26 Python
解决redis与Python交互取出来的是bytes类型的问题
Jul 16 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中return 和 exit 、break和contiue 区别与用法
2012/04/09 PHP
php列出一个目录下的所有文件的代码
2012/10/09 PHP
php最简单的删除目录与文件实现方法
2014/11/28 PHP
详解PHP 7.4 中数组延展操作符语法知识点
2019/07/19 PHP
Javascript 兼容firefox的一些问题
2009/05/21 Javascript
基于jquery的模态div层弹出效果
2010/08/21 Javascript
JQuery验证jsp页面属性是否为空(实例代码)
2013/11/08 Javascript
JavaScript动态改变HTML页面元素例如添加或删除
2014/08/10 Javascript
jquery使用正则表达式验证email地址的方法
2015/01/22 Javascript
Javascript实现多彩雪花从天降散落效果的方法
2015/02/02 Javascript
JavaScript File分段上传
2016/03/10 Javascript
js从数组中删除指定值(不是指定位置)的元素实现代码
2016/09/13 Javascript
jQuery实现的网页换肤效果示例
2016/09/20 Javascript
jQuery实现复选框的全选和反选
2017/02/02 Javascript
微信小程序地图绘制线段并且测量(实例代码)
2020/01/02 Javascript
使用python实现拉钩网上的FizzBuzzWhizz问题示例
2014/05/05 Python
深入学习python的yield和generator
2016/03/10 Python
Python编程实现使用线性回归预测数据
2017/12/07 Python
python实现发送邮件功能代码
2017/12/14 Python
Python简单实现的代理服务器端口映射功能示例
2018/04/08 Python
解决Python获取字典dict中不存在的值时出错问题
2018/10/17 Python
python aiohttp的使用详解
2019/06/20 Python
最小二乘法及其python实现详解
2020/02/24 Python
linux centos 7.x 安装 python3.x 替换 python2.x的过程解析
2020/12/14 Python
HTML5轻松实现全屏视频背景的示例
2018/04/23 HTML / CSS
HTML5触摸事件实现移动端简易进度条的实现方法
2018/05/04 HTML / CSS
塔吉特百货公司官网:Target
2017/04/27 全球购物
英国最大的天然和有机产品在线零售商之一:Big Green Smile
2020/05/06 全球购物
网络工程师个人的自我评价范文
2013/10/01 职场文书
致铅球运动员广播稿精选
2014/01/12 职场文书
《维生素c的故事》教学反思
2014/02/18 职场文书
房地产营销活动策划方案
2014/09/15 职场文书
个人遵守党的政治纪律情况对照检查材料思想汇报
2014/09/25 职场文书
大学生个人学年总结
2015/02/15 职场文书
2016春节慰问信范文
2015/03/25 职场文书
2015年护理工作总结范文
2015/04/03 职场文书