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的Django框架中实现Hacker News的一些功能
Apr 17 Python
Python计算字符宽度的方法
Jun 14 Python
在Pycharm中设置默认自动换行的方法
Jan 16 Python
对PyQt5中的菜单栏和工具栏实例详解
Jun 20 Python
python实现一个函数版的名片管理系统过程解析
Aug 27 Python
Python基于gevent实现高并发代码实例
May 15 Python
python中sklearn的pipeline模块实例详解
May 21 Python
keras实现多种分类网络的方式
Jun 11 Python
Python3爬虫关于代理池的维护详解
Jul 30 Python
OpenCV+python实现膨胀和腐蚀的示例
Dec 21 Python
教你怎么用Python监控愉客行车程
Apr 29 Python
python关于集合的知识案例详解
May 30 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 5.0对象模型深度探索之类的静态成员
2008/03/27 PHP
php守护进程 加linux命令nohup实现任务每秒执行一次
2011/07/04 PHP
php发送post请求的三种方法
2014/02/11 PHP
PHP实现的连贯操作、链式操作实例
2014/07/08 PHP
php结合mysql与mysqli扩展处理事务的方法
2016/06/29 PHP
php-fpm超时时间设置request_terminate_timeout资源问题分析
2019/09/27 PHP
JavaScript模板入门介绍
2012/09/26 Javascript
Three.js源码阅读笔记(基础的核心Core对象)
2012/12/27 Javascript
javascript表单验证 - Parsley.js使用和配置
2013/01/25 Javascript
js(jQuery)获取时间的方法及常用时间类搜集
2013/10/23 Javascript
jquery 根据name名获取元素的value值
2015/02/27 Javascript
JavaScript中操作Mysql数据库实例
2015/04/02 Javascript
Bootstrap模态框调用功能实现方法
2016/09/19 Javascript
概述如何实现一个简单的浏览器端js模块加载器
2016/12/07 Javascript
vue图片加载与显示默认图片实例代码
2017/03/16 Javascript
简化vuex的状态管理方案的方法
2018/06/02 Javascript
浅谈vue项目用到的mock数据接口的两种方式
2019/10/09 Javascript
js判断密码强度的方法
2020/03/18 Javascript
Pycharm学习教程(1) 定制外观
2017/05/02 Python
tensorflow输出权重值和偏差的方法
2018/02/10 Python
Python 函数基础知识汇总
2018/03/09 Python
在Python中实现shuffle给列表洗牌
2018/11/08 Python
在python中实现将一张图片剪切成四份的方法
2018/12/05 Python
Python之虚拟环境virtualenv,pipreqs生成项目依赖第三方包的方法
2019/07/23 Python
python3 求约数的实例
2019/12/05 Python
Python中import导入不同目录的模块方法详解
2020/02/18 Python
Python PyQt5模块实现窗口GUI界面代码实例
2020/05/12 Python
Python smtp邮件发送模块用法教程
2020/06/15 Python
CSS3实现彩色进度条动画的示例
2020/10/29 HTML / CSS
Hotels.com中国区:好订网
2016/08/18 全球购物
Rodd & Gunn澳大利亚官网:新西兰男装品牌
2018/09/25 全球购物
项目经理聘任书
2014/03/29 职场文书
网络营销计划
2015/01/17 职场文书
2015年学生会工作总结范文
2015/03/31 职场文书
智慧人生:永远不需要向任何人解释你自己
2019/08/20 职场文书
uni-app 微信小程序授权登录的实现步骤
2022/02/18 Javascript