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中使用md5sum检查目录中相同文件代码分享
Feb 02 Python
python实现的DES加密算法和3DES加密算法实例
Jun 03 Python
Python代码解决RenderView窗口not found问题
Aug 28 Python
python实现list元素按关键字相加减的方法示例
Jun 09 Python
Python中django学习心得
Dec 06 Python
在python下使用tensorflow判断是否存在文件夹的实例
Jun 10 Python
python+jinja2实现接口数据批量生成工具
Aug 28 Python
Python多分支if语句的使用
Sep 03 Python
详解Scrapy Redis入门实战
Nov 18 Python
python可视化分析的实现(matplotlib、seaborn、ggplot2)
Feb 03 Python
MATLAB 如何求取离散点的曲率最大值
Apr 16 Python
python爬取新闻门户网站的示例
Apr 25 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采集相关教程之一 CURL函数库
2010/02/15 PHP
linux系统下php安装mbstring扩展的二种方法
2014/01/20 PHP
浅析PHP中strlen和mb_strlen的区别
2014/08/31 PHP
PHP cookie与session会话基本用法实例分析
2019/11/18 PHP
jQuery 使用手册(三)
2009/09/23 Javascript
Javascript结合css实现网页换肤功能
2009/11/02 Javascript
JQuery onload、ready概念介绍及使用方法
2013/04/27 Javascript
jQuery+AJAX实现网页无刷新上传
2015/02/22 Javascript
javascript制作网页图片上实现下雨效果
2015/02/26 Javascript
js实现超简单的展开、折叠目录代码
2015/08/28 Javascript
JS实现自动定时切换的简洁网页选项卡效果
2015/10/13 Javascript
node.js实现爬虫教程
2020/08/25 Javascript
jQuery实现的网格线绘制方法
2016/06/20 Javascript
js多个物体运动功能实例分析
2016/12/20 Javascript
使用layer.msg 时间设置不起作用的解决方法
2019/09/12 Javascript
javascript设计模式 ? 观察者模式原理与用法实例分析
2020/04/22 Javascript
vue实现虚拟列表功能的代码
2020/07/28 Javascript
[05:59]带你看看DPC的台前幕后
2021/03/11 DOTA
使用Python将数组的元素导出到变量中(unpacking)
2016/10/27 Python
Django查询数据库的性能优化示例代码
2017/09/24 Python
python 将数据保存为excel的xls格式(实例讲解)
2018/05/03 Python
基于python3 OpenCV3实现静态图片人脸识别
2018/05/25 Python
python高级特性和高阶函数及使用详解
2018/10/17 Python
CSS3 border-image详解、应用及jQuery插件
2011/08/29 HTML / CSS
草莓网化妆品日本站:Strawberrynet日本
2017/10/20 全球购物
在阿联酋购买翻新手机和平板电脑:Teckzu
2021/02/12 全球购物
《桥》教学反思
2014/04/09 职场文书
贷款担保申请书
2014/05/20 职场文书
森林防火宣传标语
2014/06/27 职场文书
小学生推普周国旗下讲话稿
2014/09/21 职场文书
办公用房租赁协议书
2014/11/29 职场文书
大学生入党自荐书
2015/03/05 职场文书
施工安全保证书
2015/05/09 职场文书
工作态度怎么写
2015/06/25 职场文书
PyTorch 如何检查模型梯度是否可导
2021/06/05 Python
详解非极大值抑制算法之Python实现
2021/06/28 Python