利用OpenCV实现图片中导线的识别

下面是一个需求,识别图片中的导线,要在图像中检测导线,我们需要采用不同于直线检测的方法。由于OpenCV没有直接的曲线检测函数,如同它对直线提供的HoughLinesHoughLinesP,检测曲线通常需要更多的图像处理步骤和算法:

  1. 边缘检测:首先使用Canny边缘检测器检测图像中的边缘。

  2. 寻找轮廓 :然后使用cv2.findContours来寻找边缘连接的轮廓。轮廓可能对应于图像中的曲线。

  3. 轮廓分析:分析这些轮廓,筛选出满足特定条件的轮廓,如长度、曲率等。

  4. 绘制轮廓:在原始图像上绘制这些轮廓。

下面是成品代码:

python 复制代码
# coding=UTF-8

import cv2
import numpy as np

def load_and_detect_curves(image_path, new_width, new_height):
    # 加载图像
    image = cv2.imread(image_path)
    if image is None:
        print("无法加载图像")
        return

    # 调整图像尺寸
    resized_image = cv2.resize(image, (new_width, new_height))

    # 将图像转换为灰度图
    gray_image = cv2.cvtColor(resized_image, cv2.COLOR_BGR2GRAY)

    # 应用高斯模糊
    blurred_image = cv2.GaussianBlur(gray_image, (5, 5), 0)

    # 使用Canny边缘检测器检测边缘
    edges = cv2.Canny(blurred_image, 50, 150, apertureSize=3)

    # 寻找轮廓
    contours, _ = cv2.findContours(edges, cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE)

    # 筛选和绘制轮廓
    for contour in contours:
        # 可以在这里添加条件筛选特定轮廓
        if len(contour) > 100:  # 例如,筛选长度大于100的轮廓
            cv2.drawContours(resized_image, [contour], -1, (0, 255, 0), 2)

    # 显示结果
    cv2.imshow('Detected Curves', resized_image)
    if cv2.waitKey(0) & 0xFF == ord('q'):
        cv2.destroyAllWindows()

# 使用函数
load_and_detect_curves('./images/2.png', 800, 600)  # 替换为你的图像路径和期望的尺寸
# load_and_detect_curves('./images/demo.jpg', 800, 600)  # 替换为你的图像路径和期望的尺寸

下面是运行效果:

相关推荐
实在智能RPA2 分钟前
从 User-Agent 到 AI Agent:2026年企业级自动化架构的范式转移与实战深度解析
人工智能·ai·rpa
新缸中之脑4 分钟前
让Claude Code使用MiniMax API
人工智能
小鸡吃米…8 分钟前
基于 TensorFlow 的图像识别
人工智能·python·tensorflow
Dev7z9 分钟前
基于深度学习的违章停车检测系统的设计与实现
人工智能·深度学习·违章停车·人行道违停·禁停区违停·双排停车·斑马线违停
发哥来了15 分钟前
主流GEO优化系统技术对比评测
人工智能·信息可视化
儒雅芝士20 分钟前
RethinkFun深度学习笔记
人工智能·笔记·深度学习
xiaoginshuo20 分钟前
流程自动化从传统RPA升级到AI Agent,如何匹配合适的自动化方案
人工智能·自动化·rpa
这张生成的图像能检测吗27 分钟前
(论文速读)XLNet:语言理解的广义自回归预训练
人工智能·计算机视觉·nlp·注意力机制
新缸中之脑29 分钟前
Ollama视觉模型实测
人工智能
悠闲蜗牛�30 分钟前
边缘AI推理实战:从服务器到嵌入式设备的模型部署与优化
运维·服务器·人工智能