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在html中插入简单的代码并加上时间戳的方法
Oct 16 Python
python调用staf自动化框架的方法
Dec 26 Python
详解pandas.DataFrame中删除包涵特定字符串所在的行
Apr 04 Python
如何使用Python 打印各种三角形
Jun 28 Python
Django 外键的使用方法详解
Jul 19 Python
Python高级特性 切片 迭代解析
Aug 23 Python
Django学习之文件上传与下载
Oct 06 Python
完美解决pycharm导入自己写的py文件爆红问题
Feb 12 Python
Django-xadmin后台导入json数据及后台显示信息图标和主题更改方式
Mar 11 Python
解决TensorFlow程序无限制占用GPU的方法
Jun 30 Python
关于python3.9安装wordcloud出错的问题及解决办法
Nov 02 Python
python实现ROA算子边缘检测算法
Apr 05 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修改指定文件后缀的方法
2014/09/11 PHP
跟我学Laravel之请求与输入
2014/10/15 PHP
SSO单点登录的PHP实现方法(Laravel框架)
2016/03/23 PHP
PHP微信支付结果通知与回调策略分析
2019/01/10 PHP
Js 获取HTML DOM节点元素的方法小结
2009/04/24 Javascript
ajax请求get与post的区别总结
2013/11/04 Javascript
jquery获取tr并更改tr内容示例代码
2014/02/13 Javascript
用JavaScript实现使用鼠标画线的示例代码
2014/08/19 Javascript
jquery实现多行文字图片滚动效果示例代码
2014/10/10 Javascript
基于jQuery实现表单提交验证
2014/11/24 Javascript
jQuery中:contains选择器用法实例
2014/12/30 Javascript
代码分析jQuery四种静态方法使用
2015/07/23 Javascript
微信小程序 video详解及简单实例
2017/01/16 Javascript
原生js实现网页顶部自动下拉/收缩广告效果
2017/01/20 Javascript
JavaScript之class继承_动力节点Java学院整理
2017/07/03 Javascript
js 只比较时间大小的实例
2017/10/26 Javascript
vue.js中toast用法及使用toast弹框的实例代码
2018/08/27 Javascript
vue-router路由懒加载的实现(解决vue项目首次加载慢)
2018/08/28 Javascript
微信小程序公用参数与公用方法用法示例
2019/01/09 Javascript
详解ES6 export default 和 import语句中的解构赋值
2019/05/28 Javascript
Javascript实现鼠标点击冒泡特效
2019/12/24 Javascript
Python实现的简单万年历例子分享
2014/04/25 Python
python实现壁纸批量下载代码实例
2018/01/25 Python
TensorFlow深度学习之卷积神经网络CNN
2018/03/09 Python
使用Python抓取豆瓣影评数据的方法
2018/10/17 Python
TensorFlow学习之分布式的TensorFlow运行环境
2020/02/05 Python
python eventlet绿化和patch原理
2020/11/21 Python
python给list排序的简单方法
2020/12/10 Python
通过HTML5规范搞定i、em、b、strong元素的区别
2017/03/04 HTML / CSS
英国领先的电子、技术和办公用品购物网站:Ebuyer
2018/04/04 全球购物
请用Python写一个获取用户输入数字,并根据数字大小输出不同信息的脚本
2014/05/20 面试题
道路建设实施方案
2014/03/18 职场文书
12岁生日演讲稿
2014/05/14 职场文书
观看《信仰》心得体会
2016/01/15 职场文书
一行Python命令实现批量加水印
2022/04/07 Python
Elasticsearch 批量操作
2022/04/19 Python