OpenCV检测圆形东西是否存在缺口?

这篇具有很好参考价值的文章主要介绍了OpenCV检测圆形东西是否存在缺口?。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。


前言

opencv 圆形 缺陷 检测,OpenCV,opencv,人工智能,计算机视觉

想了挺久,一直没解决这个问题。后面勉强解决了。


一、试过的方法

1.想用圆度来解决,后来发现圆度差值很小,完整的圆圆度0.89,然后有缺角的圆圆度0.88。
2.想用面积来解决,但是图片中每个圆大小不是一致的,是有一些差别的,也没办法。
3.多边形拟合、凸包都不合适。
4.想使用角点的数量来确定,发现也是不行。看下图
opencv 圆形 缺陷 检测,OpenCV,opencv,人工智能,计算机视觉
opencv 圆形 缺陷 检测,OpenCV,opencv,人工智能,计算机视觉

二、最终使用的方法

1.先极坐标变换

代码如下(示例):

import cv2
import os

# 设置文件夹路径
folder_path = r"E:\VSCODE_PY\CAPCode\Posong\cap_2"

# 遍历文件夹中的图像文件
for file_name in os.listdir(folder_path):
    if file_name.endswith(".jpg"):
        # 读取图像并转换为灰度图像
        image_path = os.path.join(folder_path, file_name)
        image = cv2.imread(image_path)
        gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)

        # 进行极坐标变换
        polar_image = cv2.linearPolar(gray, (gray.shape[1]//2, gray.shape[0]//2), gray.shape[1]//2+10, cv2.WARP_FILL_OUTLIERS)

        # 进行边缘检测
        edges = cv2.Canny(polar_image, 50, 150)

        # 保存处理后的图像
        output_path = os.path.join(folder_path, "polar_" + file_name)
        cv2.imwrite(output_path, polar_image)

极坐标的中心点可以根据实际情况设置一下。

2.计算斜率

代码如下(示例):
opencv 圆形 缺陷 检测,OpenCV,opencv,人工智能,计算机视觉

import os
import cv2
import numpy as np

# 设置最小间距阈值
min_distance = 10

# 遍历cap_8文件夹内的所有图片
for filename in os.listdir(r'E:\VSCODE_PY\CAPCode\Posong\cap_8'):
    if filename.endswith('.jpg'):
        # 读取图像并进行灰度化处理
        image = cv2.imread(os.path.join(r'E:\VSCODE_PY\CAPCode\Posong\cap_8', filename))
        gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)

        # 进行边缘检测
        edges = cv2.Canny(gray, 50, 150)

        # 查找轮廓
        contours, _ = cv2.findContours(edges, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)

        # 创建一个空白图像,用于绘制轮廓
        contour_image = np.zeros_like(image)

        # 绘制轮廓
        cv2.drawContours(contour_image, contours, -1, (0, 255, 0), 2)

        # 查找角点
        corners = cv2.cornerHarris(gray, 2, 3, 0.04)

        # 标记角点
        threshold = 0.45 * corners.max()  # 调整阈值
        corners = cv2.dilate(corners, None)
        image[corners > threshold] = [0, 0, 255]

        # 计算任意两个角点之间的斜率
        corner_points = np.argwhere(corners > threshold)
        slopes = []
        for i in range(len(corner_points)):
            for j in range(i+1, len(corner_points)):
                x1, y1 = corner_points[i]
                x2, y2 = corner_points[j]
                distance = np.sqrt((x2 - x1) ** 2 + (y2 - y1) ** 2)
                if distance >= min_distance:
                    if x2 - x1 == 0:
                        slope = float('inf')
                    else:
                        slope = (y2 - y1) / (x2 - x1)
                    slopes.append(slope)

        # 处理无穷大和无穷小的情况
        slopes = [slope for slope in slopes if slope != float('inf') and slope != float('-inf')]
        slopes.sort()

        # 输出最大斜率和最小斜率的绝对值
        if len(slopes) >= 2:
            max_slope = max(abs(slopes[-2]), abs(slopes[1]))
            min_slope = min(abs(slopes[-2]), abs(slopes[1]))
        else:
            max_slope = float('-inf')
            min_slope = float('inf')

        print("图片{}的最大斜率的绝对值:".format(filename), max_slope)
        print("图片{}的最小斜率的绝对值:".format(filename), min_slope)

        # 显示结果
        cv2.imshow('Contours with Corners', image)
        cv2.waitKey(0)
        cv2.destroyAllWindows()



角点稍微多,要先设置一下任意2个角点的斜率必须大于最小间距。
这样可以求出每一张图片的斜率绝对值最大和最小值,即看下凸起部分是不是影响到了曲线的斜率。


总结

完成。文章来源地址https://www.toymoban.com/news/detail-763442.html

到了这里,关于OpenCV检测圆形东西是否存在缺口?的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

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

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

相关文章

  • 【OpenCV】OpenCV4工业缺陷检测的六种方法

    机器视觉是使用各种工业相机,结合传感器跟电气信号实现替代传统人工,完成对象识别、计数、测量、缺陷检测、引导定位与抓取等任务。其中工业品的缺陷检测极大的依赖人工完成,特别是传统的3C制造环节,产品缺陷检测依赖于人眼睛来发现与检测,不仅费时费力还面

    2024年02月03日
    浏览(44)
  • 工业缺陷检测项目实战(一)——基于opencv的工件缺陷检测C++和python实现

    作为研究生,每一个项目都很重要,这里给大家分享一个好入门项目,代码纯自己写,网上都是python的,但是有些企业要求C++编写项目,所以希望大家能学到东西。 一. 问题陈述 工件的展示,这是一个视频,然后工件一个个经过,要检测出哪个工件有缺陷,并且分类缺陷的种

    2024年02月04日
    浏览(58)
  • OpenCV C++案例实战三十三《缺陷检测》

    本案例将使用OpenCV C++ 进行PCB印刷缺陷检测。目前缺陷检测算法可分为两大类: 一:基于模板匹配的缺陷检测 二:基于深度学习的缺陷检测,主要利用目标检测去识别缺陷部分。 本文算法主要是基于模板匹配算法进行缺陷检测,参考《基于差异模型的印刷标签缺陷检测算法

    2024年02月08日
    浏览(46)
  • 使用OpenCV和Python实现缺陷检测的示例代码

    你需要使用cv2.imshow()函数来显示结果。具体来说,你可以使用以下代码来显示结果: 在上面的代码中,\\\'Result’是窗口的名称,img是要显示的图像。cv2.waitKey(0)函数会等待用户按下任意键后关闭窗口。cv2.destroyAllWindows()函数会关闭所有打开的窗口。

    2024年02月12日
    浏览(67)
  • opencv 案例05-基于二值图像分析(简单缺陷检测)

    缺陷检测,分为两个部分,一个部分是提取指定的轮廓,第二个部分通过对比实现划痕检测与缺角检测。本次主要搞定第一部分,学会观察图像与提取图像ROI对象轮廓外接矩形与轮廓。 下面是基于二值图像分析的大致流程 读取图像 将图像转换为灰度图,并对其进行二值化处

    2024年02月10日
    浏览(46)
  • python opencv 图片缺陷检测(讲解直方图以及相关系数对比法)

    2.1灰度转换(将原图和要检测对比的图分开灰度化) 灰度化的作用是因为后面的直方图比较需要以像素256为基准进行相关性比较 2.2 直方图计算(结果其实是二维的图表–用画图的方式展示) 第一个参数: 必须为列表[],哪怕只有一个图片 ,image输入图像 channels::传入图像的

    2024年01月23日
    浏览(46)
  • 【OpenCV】告别人工目检:深度学习技术引领工业品缺陷检测新时代

    目录 前言 机器视觉 缺陷检测 工业上常见缺陷检测方法 内容简介 作者简介 目录 读者对象 如何阅读本书 获取方式 前言 前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。 点击跳转到网站 机器视觉 机器视觉是使用各种工业相机,结

    2024年02月04日
    浏览(51)
  • OpenCV | 告别人工目检:深度学习技术引领工业品缺陷检测新时代

    机器视觉是使用各种工业相机,结合传感器跟电气信号实现替代传统人工,完成对象识别、计数、测量、缺陷检测、引导定位与抓取等任务。其中工业品的缺陷检测极大的依赖人工完成,特别是传统的3C制造环节,产品缺陷检测依赖于人眼睛来发现与检测,不仅费时费力还面

    2024年02月04日
    浏览(41)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包