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 相关文章推荐
在Django的session中使用User对象的方法
Jul 23 Python
Python装饰器知识点补充
May 28 Python
Python使用分布式锁的代码演示示例
Jul 30 Python
Python3爬取英雄联盟英雄皮肤大图实例代码
Nov 14 Python
如何使用Flask-Migrate拓展数据库表结构
Jul 24 Python
Python pandas库中的isnull()详解
Dec 26 Python
python使用配置文件过程详解
Dec 28 Python
python使用HTMLTestRunner导出饼图分析报告的方法
Dec 30 Python
python+selenium+Chrome options参数的使用
Mar 18 Python
python numpy矩阵信息说明,shape,size,dtype
May 22 Python
浅析Python中字符串的intern机制
Oct 03 Python
分布式全文检索引擎ElasticSearch原理及使用实例
Nov 14 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
提问的智慧(2)
2006/10/09 PHP
PHP 过滤页面中的BOM(实现代码)
2013/06/29 PHP
javascript 异常处理使用总结
2009/06/21 Javascript
javascript innerText和innerHtml应用
2010/01/28 Javascript
JavaScript入门之对象与JSON详解
2011/10/21 Javascript
javascript 构造函数强制调用经验总结
2012/12/02 Javascript
javascript + jquery实现定时修改文章标题
2014/03/19 Javascript
Node.js实现简单聊天服务器
2014/06/20 Javascript
JavaScript移除数组内重复元素的方法
2015/03/18 Javascript
js数组如何添加json数据及js数组与json的区别
2015/10/27 Javascript
jQuery实现鼠标选文字发新浪微博的方法
2016/04/02 Javascript
jQuery添加options点击事件并传值实例代码
2016/05/18 Javascript
JS基于HTML5的canvas标签实现炫目的色相球动画效果实例
2016/08/24 Javascript
Vue关于数据绑定出错解决办法
2017/05/15 Javascript
分析JS单线程异步io回调的特性
2017/12/01 Javascript
微信小程序搭建自己的Https服务器
2019/05/02 Javascript
js实现随机8位验证码
2020/07/24 Javascript
Vue开发中遇到的跨域问题及解决方法
2020/02/11 Javascript
[00:34]拔城逐梦,热血永恒!2020(秋)完美世界城市挑战赛报名开启
2020/10/09 DOTA
Python迭代器定义与简单用法分析
2018/04/30 Python
对pandas写入读取h5文件的方法详解
2018/12/28 Python
Pycharm新手教程(只需要看这篇就够了)
2019/06/18 Python
python如何求圆的面积
2020/07/01 Python
Python类成员继承重写的实现
2020/09/16 Python
Pytorch实现WGAN用于动漫头像生成
2021/03/04 Python
做一个能自适应高度的textarea的示例代码
2019/09/06 HTML / CSS
美国首屈一指的高品质珠宝设计师和零售商:Allurez
2018/01/23 全球购物
Shopee菲律宾:在线购买和出售
2019/11/25 全球购物
公务员职务工作的自我评价
2013/11/01 职场文书
演讲稿怎么写
2014/01/07 职场文书
喝酒检查书范文
2014/02/23 职场文书
统计员岗位职责范本
2015/04/14 职场文书
2019运动会广播加油稿汇总
2019/08/21 职场文书
李清照的诗词赏析(20首)
2019/08/22 职场文书
Python机器学习之底层实现KNN
2021/06/20 Python
Python实现抖音热搜定时爬取功能
2022/03/16 Python