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中用Spark模块的使用教程
Apr 13 Python
python中requests使用代理proxies方法介绍
Oct 25 Python
python 实现数组list 添加、修改、删除的方法
Apr 04 Python
python实现校园网自动登录的示例讲解
Apr 22 Python
django admin 后台实现三级联动的示例代码
Jun 22 Python
pytorch 模拟关系拟合——回归实例
Jan 14 Python
基于Tensorflow使用CPU而不用GPU问题的解决
Feb 07 Python
python pandas利用fillna方法实现部分自动填充功能
Mar 16 Python
python实现读取类别频数数据画水平条形图案例
Apr 24 Python
Python无损压缩图片的示例代码
Aug 06 Python
Python3 ffmpeg视频转换工具使用方法解析
Aug 10 Python
Python使用openpyxl批量处理数据
Jun 23 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实现利用MySQL保存session的方法
2014/08/23 PHP
php实现购物车产品删除功能(2)
2020/07/23 PHP
2020最新版 PhpStudy V8.1版本下载安装使用详解
2020/10/30 PHP
js动态修改整个页面样式达到换肤效果
2014/05/23 Javascript
Bootstrap布局组件教程之Bootstrap下拉菜单
2016/06/12 Javascript
DIV+CSS+jQ实现省市联动可扩展
2016/06/22 Javascript
使用JQuery选择HTML遍历函数的方法
2016/09/17 Javascript
Bootstrap组件之下拉菜单,多级菜单及按钮布局方法实例
2017/05/25 Javascript
JavaScript之iterable_动力节点Java学院整理
2017/06/29 Javascript
vue 怎么创建组件及组件使用方法
2017/07/27 Javascript
JS字符串常用操作方法实例小结
2019/06/24 Javascript
TypeScript之调用栈的实现
2019/12/31 Javascript
使用Python制作获取网站目录的图形化程序
2015/05/04 Python
python中list常用操作实例详解
2015/06/03 Python
Django框架中方法的访问和查找
2015/07/15 Python
浅谈scrapy 的基本命令介绍
2017/06/13 Python
Python有序字典简单实现方法示例
2017/09/28 Python
Windows下python3.7安装教程
2018/07/31 Python
Python基础教程之if判断,while循环,循环嵌套
2019/04/25 Python
python实现对图片进行旋转,放缩,裁剪的功能
2019/08/07 Python
Python中的延迟绑定原理详解
2019/10/11 Python
python 实现多维数组转向量
2019/11/30 Python
Python3.7实现验证码登录方式代码实例
2020/02/14 Python
Python利用for循环打印星号三角形的案例
2020/04/12 Python
Django实现图片上传功能步骤解析
2020/04/22 Python
使用Python将语音转换为文本的方法
2020/08/10 Python
详解Anaconda安装tensorflow报错问题解决方法
2020/11/01 Python
Timberland澳大利亚官网:全球领先的户外品牌
2019/12/10 全球购物
工商管理本科生求职信
2014/07/13 职场文书
教师学习三严三实心得体会
2014/10/13 职场文书
党校学习党性分析材料
2014/12/19 职场文书
2016情人节宣传语
2015/07/14 职场文书
为什么不建议在go项目中使用init()
2021/04/12 Golang
MySQL创建表操作命令分享
2022/03/25 MySQL
vue实现列表垂直无缝滚动
2022/04/08 Vue.js
vue二维数组循环嵌套方式 循环数组、循环嵌套数组
2022/04/24 Vue.js