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

这篇具有很好参考价值的文章主要介绍了opencv 案例05-基于二值图像分析(简单缺陷检测)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

缺陷检测,分为两个部分,一个部分是提取指定的轮廓,第二个部分通过对比实现划痕检测与缺角检测。本次主要搞定第一部分,学会观察图像与提取图像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)

opencv 案例05-基于二值图像分析(简单缺陷检测),opencv实战,计算机视觉,人工智能,opencv,人工智能,计算机视觉,目标检测

  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)

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

原图:

opencv 案例05-基于二值图像分析(简单缺陷检测),opencv实战,计算机视觉,人工智能,opencv,人工智能,计算机视觉,目标检测

代码如下:

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()

运行结果如下:

opencv 案例05-基于二值图像分析(简单缺陷检测),opencv实战,计算机视觉,人工智能,opencv,人工智能,计算机视觉,目标检测

示例2:
原图:

opencv 案例05-基于二值图像分析(简单缺陷检测),opencv实战,计算机视觉,人工智能,opencv,人工智能,计算机视觉,目标检测

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

opencv 案例05-基于二值图像分析(简单缺陷检测),opencv实战,计算机视觉,人工智能,opencv,人工智能,计算机视觉,目标检测

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

opencv 案例05-基于二值图像分析(简单缺陷检测),opencv实战,计算机视觉,人工智能,opencv,人工智能,计算机视觉,目标检测

后续讲解这类的缺陷该如何检测,敬请期待!!!!文章来源地址https://www.toymoban.com/news/detail-682519.html

到了这里,关于opencv 案例05-基于二值图像分析(简单缺陷检测)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Python 基于 OpenCV 视觉图像处理实战 之 OpenCV 简单视频处理实战案例 之五 简单指定视频某片段重复播放效果

    目录 Python 基于 OpenCV 视觉图像处理实战 之 OpenCV 简单视频处理实战案例 之五 简单指定视频某片段重复播放效果 一、简单介绍 二、简单指定视频某片段重复播放效果实现原理 三、简单指定视频某片段重复播放效果案例实现简单步骤 四、注意事项 Python是一种跨平台的计算机

    2024年04月12日
    浏览(101)
  • Python 基于 OpenCV 视觉图像处理实战 之 OpenCV 简单视频处理实战案例 之十一 简单给视频添加水印图片效果

    目录 Python 基于 OpenCV 视觉图像处理实战 之 OpenCV 简单视频处理实战案例 之十一 简单给视频添加水印图片效果 一、简单介绍 二、简单给视频添加水印图片效果实现原理 三、简单给视频添加水印图片效果案例实现简单步骤 四、注意事项 Python是一种跨平台的计算机程序设计语

    2024年04月25日
    浏览(74)
  • Python 基于 OpenCV 视觉图像处理实战 之 OpenCV 简单视频处理实战案例 之六 简单指定视频某片段慢放效果

    目录 Python 基于 OpenCV 视觉图像处理实战 之 OpenCV 简单视频处理实战案例 之六 简单指定视频某片段慢放效果 一、简单介绍 二、简单指定视频某片段慢放效果实现原理 三、简单指定视频某片段慢放效果案例实现简单步骤 四、注意事项 Python是一种跨平台的计算机程序设计语言

    2024年04月14日
    浏览(61)
  • OpenCV函数应用:基于二值图像的三种孔洞填充方法记录(附python,C++代码)

    函数系列: OpenCV函数简记_第一章数字图像的基本概念(邻域,连通,色彩空间) OpenCV函数简记_第二章数字图像的基本操作(图像读写,图像像素获取,图像ROI获取,图像混合,图形绘制) OpenCV函数简记_第三章数字图像的滤波处理(方框,均值,高斯,中值和双边滤波) OpenC

    2024年02月05日
    浏览(54)
  • opencv-图像处理基础-二值图像

    1.二值图像 二值图像是指仅仅包含黑色和白色两种颜色的图像。 在计算机中,通过一个栅格状排列的数据集(矩阵)来表示和处理图像。例如,图 2-1 是 一个字母 A 的图像,计算机在处理该图像时,会首先将其划分为一个个的小方块,每一个小方 块就是一个独立的处理单位

    2024年02月15日
    浏览(56)
  • OpenCV图像处理----图像的二值化

    图像二值化( Image Binarization) 就是将图像上的像素点的灰度值设置为0或255,也就是将整个图像呈现出明显的黑白效果的过程。 二值化的原理 OpenCV提供的图像二值化API threshold()方法参数: 图片矩阵 阈值 图片中的最大值 二值化的方式 二值化的方式: THRESH_BINARY 高于阈值改为

    2024年02月12日
    浏览(41)
  • OpenCV(八):图像二值化

    目录 1.固定值二值化 2.自适应阈值二值化 3.Android JNI完整代码 1.固定值二值化 固定阈值二值化是OpenCV中一种简单而常用的图像处理技术,用于将图像转换为二值图像。在固定阈值二值化中,像素值根据一个预定义的阈值进行分类,大于阈值的像素被设置为白色,而小于或等于

    2024年02月10日
    浏览(53)
  • opencv(20) 图像阈值(二值化)

    二值化核心思想,设阈值,大于阈值的为0(黑色)或 255(白色),使图像称为黑白图。 阈值可固定,也可以自适应阈值。 自适应阈值一般为一点像素与这点为中序的区域像素平均值或者高斯分布加权和的比较,其中可以设置一个差值也可以不设置。 图像的阈值化旨在提取

    2024年02月02日
    浏览(52)
  • 使用OpenCV C++进行图像二值化操作

    threshold()将固定阈值应用于多通道图像阵列,通常用于从灰度图像中获得二值图像或用于去除噪声,即滤除值过小或过大的像素。该函数支持几种类型的阈值设置,它们由类型参数决定。 src:输入数组(多通道,8位或32位浮点数) dst:输出数组(与src的尺寸、类型、通道数相

    2024年02月03日
    浏览(45)
  • 【OpenCV】 基础入门(二)图像基础概念 | 图像灰度化处理 | 图像二值化处理

      在计算机中用一般用 M x N 的矩阵来表示一幅尺寸大小为 M x N 的数字图像,矩阵元素的值就是该图像对应位置上的像素值。    对于计算机本地磁盘中的彩色图像,单机鼠标右键,选择“属性”,可以看到一幅图像的基本信息。 1、灰度图:   灰度图是每个像素只有一

    2024年04月14日
    浏览(51)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包