OpenCV实现手套表面缺陷检测

文章目录

  • 前言
  • 一、安装所需的包
  • 二、实现源码解析
    • 1.引入库
    • 2.代码主干
  • 总结


前言

PVC手套是一款以聚氯乙烯为主原料的手套产品,具有防静电的性能。在许多行业内都会用到,例如电子制造业、药品制造业、化工业、农业等等,运用非常广泛。在PVC手套的生产过程中,会出现有一些质量问题,如粘上油污、蚊虫等情况,这个时候需要将不良品检测出来,以确保供给客户的产品是100%合格。为了检测手套表面缺陷,本文使用OpenCV传统图像处理方法检测出手套表面缺陷。
在这里插入图片描述
在这里插入图片描述


提示:以下是本篇文章正文内容,下面案例可供参考

一、安装所需的包

 pip install virtualenvpip install opencv-pythonpip install numpy

二、实现源码解析

1.引入库

代码如下(示例):

import os
import cv2
import numpy as np

2.代码主干

代码如下(示例):

IMAGE_SIZE = (500, 500)   #待测图片尺寸,也可以通过路径读取,通过shape获得,方法众多
#如果没有检测到轮廓,THRESHOLD_VALUE需要增加
#如果有不准确的轮廓值需要减少
THRESHOLD_VALUE = 110
MAX_VALUE = 255#反向阈值
INV_THRESHOLD_VALUE = 50
INV_MAX_VALUE = 255
#Canny
THRESHOLD1 = 100
THRESHOLD2 = 70#轮廓属性
CON_COLOR = (0, 0, 255)
CON_THICKNESS = 1#图像叠加特性
WHITE = (255, 255, 255)
BLACK = (0, 0, 0)
GREEN = (0, 255, 0)
RED = (0, 0, 255)
STACK_IMG_SIZE = (200, 200)while True:files = os.listdir('images')print("======================================")print("=         Available Images           =")print("======================================")for i in files:print('-> {}\t '.format(i), end='')if files.index(i) % 3 == 0 and files.index(i) != 0:print('\n')print("\n======================================")# 需要选择具有扩展名的图像名称 (ex: img1.jpeg)file = input("Select a file from the directory(q- quit): ").strip()if file == 'q' or file == 'Q':break#检测图像存放位置PATH = 'images/' + file# 图像路径imageOri = cv2.imread(PATH)try:# 转换为灰度图image = cv2.cvtColor(imageOri, cv2.COLOR_BGR2GRAY)except:print("Invalid Input! Please select correct file(ex: 'imgSample.jpg')")else:#图像resizeimage = cv2.resize(image, IMAGE_SIZE)imageOri = cv2.resize(imageOri, IMAGE_SIZE)image = cv2.GaussianBlur(image, (3, 3), 0)# 阈值图像,以便您的黑色标记是在白色背景上。ret, thresh_basic = cv2.threshold(image, THRESHOLD_VALUE, MAX_VALUE, cv2.THRESH_BINARY)#	显示阈值图像 - DEBUGGINGcv2.imshow("Thresh basic", thresh_basic)#thresh_addapt = cv2.adaptiveThreshold(image, 255, cv2.ADAPTIVE_THRESH_GAUSSIAN_C, cv2.THRESH_BINARY, 115, 1)# cv2.imshow("Thresh Adapt", thresh_addapt)# 取一个大小为5的矩阵作为核kernel = np.ones((5, 5), np.uint8)#形态学操作——侵蚀前景物体的边界#使用形态学来清除多余的标记img_erosion = cv2.erode(thresh_basic, kernel, iterations=1)# 黑色的标记是黑色背景上的白色然后找到它们的外部轮廓.ret, thresh_inv = cv2.threshold(img_erosion, INV_THRESHOLD_VALUE, INV_MAX_VALUE, cv2.THRESH_BINARY_INV)#cv2.imshow("INV", thresh_inv)# Canny算法找到边缘edged = cv2.Canny(img_erosion, THRESHOLD1, THRESHOLD2)# show canny edges - DEBUGGING#cv2.imshow('Canny', edged)#cv2.waitKey(0)# 找到轮廓# findContourscontours, hierarchy = cv2.findContours(thresh_inv, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_NONE)# ++++++++++++++++++# -- Image Stack  --# ++++++++++++++++++font = cv2.FONT_HERSHEY_SIMPLEXimageRz = cv2.resize(image, STACK_IMG_SIZE)thresh_basicRz = cv2.resize(thresh_basic, STACK_IMG_SIZE)img_erosionRz = cv2.resize(img_erosion, STACK_IMG_SIZE)thresh_invRz = cv2.resize(thresh_inv, STACK_IMG_SIZE)edgedRz = cv2.resize(edged, STACK_IMG_SIZE)imageRz = cv2.putText(imageRz, 'GrayScale', (5, 15), font, 0.5, WHITE, 1, cv2.LINE_AA)thresh_basicRz = cv2.putText(thresh_basicRz, 'ThresholdBasic', (5, 15), font,0.5, WHITE, 1,cv2.LINE_AA)img_erosionRz = cv2.putText(img_erosionRz, 'Morphology-Erosion', (5, 15), font,0.5, WHITE, 1, cv2.LINE_AA)thresh_invRz = cv2.putText(thresh_invRz, 'Threshold-mode INV', (5, 15), font,0.5, BLACK, 1, cv2.LINE_AA)edgedRz = cv2.putText(edgedRz, 'Canny Edges', (5, 15), font, 0.5, WHITE, 1, cv2.LINE_AA)numpy_horizontal_concat = np.concatenate((imageRz, thresh_basicRz, img_erosionRz,thresh_invRz, edgedRz), axis=1)cv2.imshow('Filtering...', numpy_horizontal_concat)# +++++++# 得到总轮廓num_of_con = str(len(contours) - 1)print("Number of Contours found = " + num_of_con)if len(contours) > 1:print('=       MARKINGS DETECTED            =')#显示原始imgcv2.imshow('Original Image', imageOri)# draw contours on original imgif int(num_of_con) != 0:for i in range(int(num_of_con)):highlighted_img = cv2.drawContours(imageOri, contours, i, CON_COLOR, CON_THICKNESS)highlighted_img = cv2.putText(highlighted_img, 'Approximately {} defect(s) detected'.format(num_of_con), (5, 15),font, 0.5, GREEN, 1, cv2.LINE_AA)else:highlighted_img = cv2.putText(imageOri, 'Unable to detect defects!',(5, 15), font, 0.5, RED, 2, cv2.LINE_AA)# 显示标记的图像cv2.imshow('Highlighted Defect', highlighted_img)# 保存包含突出显示缺陷的图像cv2.imwrite('Output Images/{}_DEFECTS_HIGHLIGHTED.jpg'.format(file.split('.')[0]), highlighted_img)cv2.waitKey(0)cv2.destroyAllWindows()

总结

与人工检测相比,机器视觉检测设备能够高速、高准确性、长期且稳定地进行重复性工作,大量减少出错率,也避免人眼检测弹性疲乏的缺点,提升产品质量及生产速度。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/62327.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

多交互智能手套Miiglove

Miiglove,没听过吧? 成立至今,一直低调研发,没咋宣传, 三月底才在法国的拉瓦勒VR展会上露了个脸儿。 『努力做最贴近市场需求的产品』 Miiglove虽然今年才公开宣传, 但是定向合作伙伴却已经超过150家。 合作…

2022年10月16日 8点 程序爱生活 纳指和恒指反弹的概率还在,但是反弹做空为主。

确定市场形态的敏感因子 - 灰度基金,继续扩大折价 结论:大B继续保持高折价,市场还是继续看弱。 行情核心源头 : 纳指主连日线,继续有概率反弹后再往下 从程序模拟趋势来看, 趋势指标出现反弹失败的情况, 这个正常, 但…

港联证券|人民币大消息!美科技股涨嗨,微软一夜暴增超万亿!

当地时间26日,美股三大股指收盘涨跌纷歧。到收盘,道指报33301.87点,下跌0.68%;标普500指数报4055.99点,下跌0.38%;纳指报11854.35点,上涨0.47%。 榜首共和银行大跌29.75%,该股昨天大…

微软市值一夜飙涨 5450 亿

大家好!我是韩老师。 美东时间 2 月 7 日周二(北京时间 2 月 8 日周三),微软收涨逾 4%,一夜市值飙涨超 800 亿美元(约 5450 亿元人民币),报 267.56 美元/股,最新总市值 1…

微软宣布 Windows 11 开始大范围推送

微软宣布 Windows 11 现已开始向更多符合条件的 Windows 10 电脑推送。 微软表示:无论是推广经验还是用户反馈,都是积极的。因此我们计划扩大 Windows 11 的推送范围,这比我们之前预期的要快。 如果您有符合升级条件的 Windows 10 电脑&…

测试ip地址和端口号是否被封

国内检测 端口扫描 - 站长工具 使用方法 国外检测 Open Port Check Tool - Test Port Forwarding on Your Router 使用方法 该网址国内国外一起查询 port.ping.pe 使用方法 ip:port的格式输入ip地址和端口号,下面有例子 测试分为境外和大陆两部分。结果包括成…

实现动态封禁 IP就是这么简单~

开发者(KaiFaX) 面向全栈工程师的开发者 专注于前端、Java/Python/Go/PHP的技术社区 原文:https://segmentfault.com/a/1190000018267201 为了封禁某些爬虫或者恶意用户对服务器的请求,我们需要建立一个动态的 IP 黑名单。对于黑名…

Ngnix 实现IP封禁以及自动封禁IP

1.在ngnix的conf目录下创建一个blockip.conf文件 2.里面放需要封禁的IP,格式如下 deny 1.2.3.4; 3.在ngnix的HTTP的配置中添加如下内容 include blockips.conf;4.重启 ngnix /usr/local/nginx/sbin/nginx -s reload5.然后你就会看到IP被封禁了,你会…

Ngnix IP封禁以及实现自动封禁IP

1.在ngnix的conf目录下创建一个blockip.conf文件 2.里面放需要封禁的IP,格式如下 deny 1.2.3.4;3.在ngnix的HTTP的配置中添加如下内容 include blockips.conf;4.重启 ngnix /usr/local/nginx/sbin/nginx -s reload然后你就会看到IP被封禁了,你会喜提…

研究生论文阅读总结

UWB与协同定位 UWBUltra-Wideband Aided Fast Localization and Mapping System概要uwb权值设计平滑项权值设计 Integrated UWB-Vision Approach for Autonomous Docking of UAVs in GPS-denied Environments概要加定高雷达的改变 Robust Target-relative Localization with Ul…

考研复试-密码学(对比总结版本)

密码学 对称加密算法非对称加密算法(公开密钥算法)哈希算法(单向散列算法、杂凑函数)其他 各种算法介绍就不总结了,主要列举一些基本要点,方便对比记忆 对称加密算法 DES 密文长度(每组&#x…

深大计算机复试,20考研深大成功,分享考研复试考研经验!自我检讨

上次复试的时候,鸽了一天,很抱歉,后面说了会写一期的复试体会,现在就补上,其实说实话,我这次考研也是几番跌宕起伏,小心脏有点受不住了。 复试内容: 首先先说考试的内容吧&#xff0…

1. 考研常见问题总结 从择校到复试

文章目录 前言 1. 考研流程? 2. 如何选择学校? 3. 如何选择专业? 4. 选择学校还是选择专业? 5. 如何查专业资料?考试科目等。 6. 如何复习,准备初试? 7. 复试流程? 8…

考研复试问题汇总

计算机考研复试问题总结 文章目录 计算机考研复试问题总结一 . 计算机网络1.TCP连接建立(三次握手)2.TCP连接释放(四次挥手)3.计算机网络的主要功能?4.谈下你对五层网络协议体系结构的理解?七层协议理解 5.…

即便考分很好也不予录取的研究生复试红线,都是原则性问题

在浙大研究生招生录取政策文件中有这么一句话:坚持“按需招生、全面衡量、择优录取、宁缺毋滥”的原则,以提高人才选拔质量为核心,在确保安全性、公平性和科学性的基础上,做到统筹兼顾、精准施策、严格管理。字字体现出研究生招生…

研究生期间论文发表经验总结

文章目录 前言(一志愿未录取,走的调剂)一、研究生论文及成果1.中科院二区SCI英文论文2.中科院三区SCI英文论文3.北大核心期刊论文 二、经验分享1.第一篇SCI论文(二区英文论文)第一次返回大修:第二次返回大修…

详细分析DaSiamRPN,快速把握论文要点,不会请砍我!

文章目录 整体把握训练集修改的创新点出发点修改 论文代码:https://github.com/foolwood/DaSiamRPN 论文题目:Distractor-aware Siamese Networks for Visual Object Tracking 整体把握 本篇论文赢得了vot2018短时跟踪比赛的冠军,长时跟踪比…

应用统计432考研复试提问总结精简版【二】

一、自由度是什么? 定义:构成样本统计量的独立的样本观测值的数目解释:从书中所给的平均数的角度进行 二、讲一下对t检验的理解? t检验适用于两个变量均数间的差异检验。同时用t检验的前提下:正态性和方差齐性。t检…

本科论文常见答辩问题整理

这里写目录标题 专业性问题你系统的整体设计是怎么样?用了什么技术?这些技术应用的好处是什么?框架,SSM,SSH这些有什么优势。前端,前端用了什么;你数据库整体的设计是怎么样的,某个表…

iPhone苹果下载skype for business和skype有什么区别?苹果iPhone手机iOS系统如何下载Skype到iPhone苹果手机?

skype for business和skype有什么区别? 在国内iPhone苹果手机App Store上搜索:Skype,找不到真证的Skype,只能找到skype for business(以前称为Lync 2013); 而skype for business却不是一部分人…