opencv 案例05-基于二值图像分析(简单缺陷检测)

news2025/1/15 23:19:04

缺陷检测,分为两个部分,一个部分是提取指定的轮廓,第二个部分通过对比实现划痕检测与缺角检测。本次主要搞定第一部分,学会观察图像与提取图像ROI对象轮廓外接矩形与轮廓。

下面是基于二值图像分析的大致流程

  1. 读取图像
  2. 将图像转换为灰度图,并对其进行二值化处理。
# 图像二值化
gray = cv.cvtColor(src, cv.COLOR_BGR2GRAY)
ret, binary = cv.threshold(gray, 0, 255, cv.THRESH_BINARY_INV | 
  1. 进行形态学开运算以去除噪声和平滑图像。
cv.THRESH_OTSU)
# 形态学开运算去除噪声和平滑图像
se = cv.getStructuringElement(cv.MORPH_RECT, (3, 3), (-1, -1))
binary = cv.morphologyEx(binary, cv.MORPH_OPEN, se)
cv.imshow("binary", binary)

在这里插入图片描述

  1. 提取图像中的轮廓。
# 提取图像中的轮廓
contours, hierarchy = cv.findContours(binary, cv.RETR_LIST, cv.CHAIN_APPROX_SIMPLE)

  1. 针对每个轮廓,计算其外接矩形,并根据一些条件绘制矩形和轮廓。
height, width = src.shape[:2]
for c in range(len(contours)):
    x, y, w, h = cv.boundingRect(contours[c])
    area = cv.contourArea(contours[c])
    # 根据条件过滤不符合要求的轮廓
    if h > (height//2):
        continue
    if area < 150:
        continue
    cv.rectangle(src, (x, y), (x+w, y+h), (0, 0, 255), 1, 8, 0)
    cv.drawContours(src, contours, c, (0, 255, 0), 2, 8)

整理示例:检测图片中的缺陷并将缺陷框选出来

原图:

在这里插入图片描述

代码如下:

import cv2 as cv


src = cv.imread("que01.jpg")
cv.namedWindow("input", cv.WINDOW_AUTOSIZE)
cv.imshow("input", src)

# 图像二值化
gray = cv.cvtColor(src, cv.COLOR_BGR2GRAY)
ret, binary = cv.threshold(gray, 0, 255, cv.THRESH_BINARY_INV | cv.THRESH_OTSU)
# 形态学开运算去除噪声和平滑图像
se = cv.getStructuringElement(cv.MORPH_RECT, (3, 3), (-1, -1))
binary = cv.morphologyEx(binary, cv.MORPH_OPEN, se)
cv.imshow("binary", binary)

# 提取图像中的轮廓
contours, hierarchy = cv.findContours(binary, cv.RETR_LIST, cv.CHAIN_APPROX_SIMPLE)

height, width = src.shape[:2]
for c in range(len(contours)):
    x, y, w, h = cv.boundingRect(contours[c])
    area = cv.contourArea(contours[c])
    # 根据条件过滤不符合要求的轮廓
    if h > (height//2):
        continue
    if area < 150:
        continue
    cv.rectangle(src, (x, y), (x+w, y+h), (0, 0, 255), 1, 8, 0)
    cv.drawContours(src, contours, c, (0, 255, 0), 2, 8)

cv.imshow("result", src)
cv.imwrite("binary2.png", src)

cv.waitKey(0)
cv.destroyAllWindows()

运行结果如下:

在这里插入图片描述

示例2:
原图:

在这里插入图片描述

修改上面的图片路径地址运行看效果

在这里插入图片描述

对于明显的缺陷检测还是可以的,但是实际生产的缺陷肯定不是这么明显的,如下图:

在这里插入图片描述

后续讲解这类的缺陷该如何检测,敬请期待!!!!

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

钉钉小程序引用阿里巴巴图标

2.打开的界面如图&#xff0c;先建一个iconfont.acss文件&#xff0c;全选浏览器打开的样式代码&#xff0c;复制粘贴进新建的iconfont.acss文件中 3.使用

数据安全治理现状研究与分析

近年来&#xff0c;国内外数据泄露事件频发&#xff0c;大量企业的商业利益、声誉受损。数据安全法律法规相继颁布&#xff0c;监管力度不断升级&#xff0c;企业逐渐意识到数据安全治理的重要性与紧迫性。通过对2021年开展的企业数据安全治理能力评估现状进行整理&#xff0c;…

OpenGL精简案例二

文章目录 书接上回OpenGL图片渲染Renderer程序基类颜色程序图片程序应用场景glsl 解析变量限定符 书接上回 OpenGL精简案例一 OpenGL图片渲染 Renderer public class FRenderer implements GLSurfaceView.Renderer {private String TAG "Qm";private Context cont…

探索Python的魔法世界,开启编程奇幻之旅!

无需魔杖&#xff0c;只需键盘&#xff0c;Python将带你进入一个充满奇幻和创造力的世界。本篇博客将引领你走进Python的魔法大门&#xff0c;从编程新手蜕变为编码魔法师&#xff0c;开启一段激动人心的编程奇幻之旅。 &#x1f340;引言 如果你是一名编程初学者&#xff0c;并…

16、Flink 的table api与sql之连接外部系统: 读写外部系统的连接器和格式以及Apache Hive示例(6)

Flink 系列文章 1、Flink 部署、概念介绍、source、transformation、sink使用示例、四大基石介绍和示例等系列综合文章链接 13、Flink 的table api与sql的基本概念、通用api介绍及入门示例 14、Flink 的table api与sql之数据类型: 内置数据类型以及它们的属性 15、Flink 的ta…

strtok, strtok_s(字符串分割符)和memset_s

strtok()函数的原型如下 char *__cdecl strtok(char *_String, const char *_Delimiter)strtok()函数接收两个传入参数&#xff0c;将_String中保存的字符串&#xff08;待处理字符串&#xff09;&#xff0c;按照_Delimiter中的字符作为分隔符进行分割。如果_String为空&…

亚马逊,速卖通,美客多不出单怎么办?测评补单专治出单难

亚马逊不出单怎么办? 一、广告优化 虽然现在平台内部的流量都大幅度减少&#xff0c;但是不能停止对广告的投放&#xff0c;并且更需要你花时间去优化和分析广告报表。如果广告报表显示所有的关键词曝光量都非常低&#xff0c;卖家就需要提高竞价了&#xff0c;这时候你可以…

idea配置注释模板

一、类的模板 设置里面依次找到图中标注的地方 填入 /** ${describe} author 填入你的名字 date ${YEAR}-${MONTH}-${DAY} ${TIME} version 1.0.0 */配置完成后&#xff0c;新创建的类就会自动生成类开头的注释 二、方法的注释模板 如图创建模板 步骤6中填入 *** $descrip…

AP5192 DC-DC降压恒流LED汽车头灯摩托车电动车大灯电源驱动

AP5192是一款PWM工作模式,高效率、外围简单、 内置功率MOS管&#xff0c;适用于4.5-100V输入的高精度 降压LED恒流驱动芯片。最大电流1.5A。 AP5192可实现线性调光和PWM调光&#xff0c;线性调光 脚有效电压范围0.55-2.6V. AP5192 工作频率可以通过RT 外部电阻编程 来设定&…

基于负载均衡的在线OJ实战项目

前言&#xff1a; 该篇讲述了实现基于负载均衡式的在线oj&#xff0c;即类似在线编程做题网站一样&#xff0c;文章尽可能详细讲述细节即实现&#xff0c;便于大家了解学习。 文章将采用单篇不分段形式&#xff08;ps&#xff1a;切着麻烦&#xff09;&#xff0c;附图文&#…

Linux内核源码剖析之kmem_cache_create

写在前面&#xff1a; 版本信息&#xff1a; Linux内核2.6.24&#xff08;大部分centos、ubuntu应该都在3.1。但是2.6的版本适合学习&#xff0c;后续版本本质变化也不是很大&#xff09; 一个操作系统对于内存的管理是非常的重要&#xff0c;关乎到整个系统的运行效率和内存最…

C++新经典 | C语言

目录 一、基础之查漏补缺 1.float精度问题 2.字符型数据 3.变量初值问题 4.赋值&初始化 5.头文件之<> VS " " 6.逻辑运算 7.数组 7.1 二维数组初始化 7.2 字符数组 8.字符串处理函数 8.1 strcat 8.2 strcpy 8.3 strcmp 8.4 strlen 9.函数 …

一篇掌握高级交换技术原理与配置(一):vlan聚合

一、概述 VLAN聚合&#xff08;VLAN Aggregation&#xff0c;也称Super-VLAN&#xff09;: 指在一个物理网络内&#xff0c;用多个VLAN&#xff08;称为Sub-VLAN&#xff09;隔离广播域&#xff0c;并将这些Sub-VLAN聚合成一个逻辑的VLAN&#xff08;称为Super-VLAN&#xff0…

寻找RocketMQ首席评测官【阿里云产品测评】

寻找RocketMQ首席评测官【阿里云产品测评】 前言版权推荐寻找RocketMQ首席评测官开始任务一&#xff1a;免费领取资源任务二&#xff1a;了解评测活动体验普通消息场景体验顺序消息场景体验定时消息场景体验事务消息场景体验消息堆积场景体验消息重投场景体验总结未完待续 最后…

Ubuntu升级Cmake、gcc、g++

背景 最近要安装llvm&#xff0c;我选择的是从源码安装&#xff0c;所以要使用Cmake进行构建项目。但是服务器上的Cmake、gcc、g的版本都太低了&#xff0c;不符合要求&#xff0c;所以要对此进行升级。在本博客中采用的升级方法不一定是最好的方法&#xff08;因为我也是参考…

EXCEL数据处理

1. 自定义数字格式 选中数字--右键--设置单元格格式--自定义--shang ↑ 2.条件格式 如果。。。。就。。。。 选中某列--开始--条件格式--突出显示--大于/小于/等于。。。--设置为&#xff08;可选自定义格式&#xff09; 选中区域--条件格式--清除规则--清除所选单元格的规…

外贸人看过来,这里是WhatsApp宝藏使用技巧!

如今从事外贸的宝子普遍都会用到WhatsApp这款全球即时聊天工具。其免费&#xff0c;且可以直接跟陌生人聊天&#xff0c;是一个跟海外客户建立联系的重要阵地。但是有些宝子刚接触WhatsApp&#xff0c;不知道怎么去使用&#xff0c;今天小S就整理出了几个宝藏使用技巧&#xff…

探讨C#、C++和Java这三门语言在嵌入式的地位

我理解对于初入嵌入式领域的担忧。你是想选择一款通用性最广的语言专心学习&#xff0c;但是不知如何选择&#xff0c;视频后方提供了免费的嵌入式学习资源&#xff0c;内容涵盖入门到进阶&#xff0c;需要的到后方免费获取。因为我也曾是一名计算机专业毕业生。通过一段时间的…

2023-08-29 衣品-甄别与筛选

摘要: 外在形象可以说是内在自我的具象化表现, 自我定位与自我认知的表现便是一个人的形象. 所以对于衣品的甄别, 在很大程度上是体验该衣服所表现出来与内在潜意识契合的地方. 明白了这一点, 那么在做甄别和筛选的时候就能明白很多东西. 本文一方面做一定程度的练习, 一方…

生态环境保护3D数字展厅提供了一个线上环保知识学习平台

在21世纪的今天&#xff0c;科技与环保的交汇点提供了无数令人兴奋的可能性。其中&#xff0c;生态环境保护3D数字展厅就是一个绝佳的例子。这个展厅以其独特的3D技术&#xff0c;为我们带来了一个全新的、互动的学习环境&#xff0c;让我们能够更直观地了解和理解我们的环境。…