文章目录

  • 前言
  • 一、安装所需的包
  • 二、实现源码解析
    • 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()

总结

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

OpenCV实现手套表面缺陷检测相关推荐

  1. 表面缺陷检测数据集汇总及其相关项目推荐

    点击上方"3D视觉工坊",选择"星标" 干货第一时间送达 最近,有许多朋友都在关注缺陷检测领域,今天来看看缺陷检测. 目前, 基于机器视觉的表面 缺陷装备已经在 ...

  2. 模式识别和机器学习有必要学么_【视觉】机器视觉表面缺陷检测综述(下)

    摘自于:汤勃, 孔建益, 伍世虔. 机器视觉表面缺陷检测综述[J]. 中国图象图形学报, 2017, 22(12):1640-1663.关键词:机器视觉; 表面缺陷; 检测算法; 图像处理; 图像识别 ...

  3. 基于 C++ MFC 活塞环外观表面缺陷检测【100010409】

    活塞环外观表面缺陷检测 1 绪论 1.1 课题研究背景和意义 活塞环是用于嵌入活塞槽沟内部的金属环,是一种具有较大向外扩张变形的金属弹性环,它被装配到剖面与其相应的环形槽内.活塞环的作用包括密封.调节 ...

  4. 使用Python,OpenCV和Hough圆检测图像中的圆

    使用Python,OpenCV和Hough圆检测图像中的圆 1. 效果图 2. cv2.HoughCircles(image, method, dp, minDist) 3. 源码 参考 前几篇博客中 ...

  5. 用C++ 和OpenCV 实现视频目标检测(YOLOv4模型)

    点击上方"视学算法",选择加"星标"或"置顶" 重磅干货,第一时间送达 据说,现在很多小区都上线了AI抓拍高空抛物的黑科技,可以自动分析抛物 ...

  6. 表面缺陷检测数据集汇总及其相关论文集收集 | Github开源

    点击上方"3D视觉工坊",选择"星标" 干货第一时间送达 Github:Surface-Defect-Detection ???????? 我不断总结表面缺陷研 ...

  7. opencv 裁剪 java_如何在opencv java中裁剪检测到的面部图像

    我在 java中使用opencv 2.4.10检测到图像中的面部 我把我的面部检测代码. import org.opencv.core.Core; import org.opencv.core.Mat ...

  8. 用 Opencv 和 Python 模糊检测

    用 Opencv 和 Python 模糊检测 在刚刚过去的这个周末,我坐下来想在 iphoto 中整理这些海量的照片.这不仅仅意味着巨大的工作量,因为我很快注意到一个现象--其中充斥着大量模糊的照片. ...

  9. 使用OpenCV进行人脸关键点检测

    使用OpenCV进行人脸关键点检测 1 双脸效果 2 单脸效果

最新文章

  1. html5考试总结300字,期中考心得300字5
  2. 人人都能学会的python编程教程(基础篇)完整版
  3. HTML5 Audio(音频)
  4. hive 和mysql配置_Hive学习和配置Mysql
  5. mysql5.1 utf8_编译安装mysql 5.1使用utf8解决乱码问题
  6. 修改目录标题层级_关键词所在页面的层级越高权重越大
  7. 炼数成金数据分析课程---10、python中如何画图
  8. 如何使用pyspark
  9. 转:git设置过滤忽略的文件或文件夹
  10. perl脚本的参数输入
  11. dnf助手服务器内部出错,地下城与勇士TGP的DNF助手异常解决办法 TGP-DNF助手补丁不适配怎么办...
  12. 深入浅出的etl作业调度工具taskctl
  13. wps之word设置页眉
  14. Python html.parser库学习小结
  15. java 毫秒数一天_java用毫秒数做日期计算的一个踩坑记录
  16. mysql实现跨服务器查询数据
  17. 支持服务器和客户端杀毒软件,服务器上小心使用杀毒软件和软件防火墙
  18. matlab中如何分布运行,matlab安装、运行与其他问题集锦
  19. Koalas - 入门基本操作
  20. 清茶一杯-手机、电子阅读器和生活

热门文章

  1. 12333提交显示服务器异常,ora-600[12333]错误小结及跟踪方法
  2. 自注册DM(五)中国移动CMCC移动DM适配指南和注意事项和常见问题分析
  3. java基础--接口(interface)
  4. 嵌入式linux驱动自动化测试,通用的嵌入式自动化测试框架 - 心心草的个人空间 - 51Testing软件测试网 51Testing软件测试网-软件测试人的精神家园...
  5. 新手如何安装及配置VMware Workstation虚拟机及Xshell远程管理软件
  6. [3]工作流框架:Flowable Restful API 一览
  7. 关于在VUE中使用sass loader报错的问题
  8. 微信小程序 实现标签多选框
  9. 使用字体图标的4种方法
  10. 解决Android平台移植ffmpeg的一些问题