如何利用opencv编写程序实现缺陷检测,过程是怎样
Admin 2022-07-04 群英技术资讯 1255 次浏览
在这篇文章中,我们来学习一下“如何利用opencv编写程序实现缺陷检测,过程是怎样”的相关知识,下文有详细的讲解,易于大家学习和理解,有需要的朋友可以借鉴参考,下面就请大家跟着小编的思路一起来学习一下吧。利用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)











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绘制原图和待检测图之间的关系折线图。对比两个曲线的差异。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:mmqy2019@163.com进行举报,并提供相关证据,查实之后,将立刻删除涉嫌侵权内容。
猜你喜欢
这篇文章主要为大家介绍了flask route对协议作用及设计思路详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
Python内置函数-vars()函数。vars() 函数返回对象object的属性和属性值的字典对象。
在这篇文章中我们来了解一下python事件,包括延迟运行事件、重叠事件、事件优先级、取消事件、其他方法。一些朋友可能会遇到这方面的问题,对此在下文小编向大家来讲解一下,内容详细,易于理解,希望大家阅读完这篇能有收获哦,有需要的朋友就往下看吧!
圆周率没有精确的计算公式,所以只能用近似的方式计算它的近似值。这篇文章主要介绍了利用Python计算圆周率π的相关资料,需要的朋友可以参考下
这篇文章主要介绍了Python的3种运行方式:命令行窗口、Python解释器、IDLE的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
成为群英会员,开启智能安全云计算之旅
立即注册Copyright © QY Network Company Ltd. All Rights Reserved. 2003-2020 群英 版权所有
增值电信经营许可证 : B1.B2-20140078 粤ICP备09006778号 域名注册商资质 粤 D3.1-20240008