风痕天际 2024-10-27 21:47 采纳率: 66.7%
浏览 2

如何使用opencv识别空心矩形

在进行空心图形的识别时,总是识别不到空心内容。
我的思路是先识别颜色,在识别出颜色的部分进行形状判别。因为空心图形的顶点大于四个,所以当条件满足时进行输出,但是总是无法识别。在输出的图像中,内外边框总是被识别成一个图形。

  • 写回答

2条回答 默认 最新

  • 小ᶻZ࿆ 2024-10-28 00:52
    关注

    回答引用自GPT-4o,由博主小ᶻZ࿆编写,若还有疑问可评论或留言:

    使用OpenCV识别空心矩形的实现方案

    问题描述

    题主尝试使用OpenCV识别空心矩形图形,但遇到内外边框被识别成一个整体的问题。具体而言,题主的思路是先识别颜色,然后进行形状判别,但由于空心图形的顶点较多,判断条件无法正确识别内外边框。

    解决方法

    以下是一个使用Python和OpenCV识别空心矩形的完整代码示例。通过边缘检测、轮廓识别,并结合形状特征判断,可以将空心矩形的内外边框单独识别出来。

    实现代码
    import cv2
    import numpy as np
    
    # 读取图像并转换为灰度图
    image = cv2.imread('hollow_rectangle.jpg')
    gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
    
    # 应用边缘检测
    edges = cv2.Canny(gray, 50, 150)
    
    # 查找轮廓
    contours, hierarchy = cv2.findContours(edges, cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE)
    
    # 遍历轮廓并判别矩形
    for i, contour in enumerate(contours):
        # 使用多边形拟合近似轮廓,判断顶点数是否接近4
        approx = cv2.approxPolyDP(contour, 0.02 * cv2.arcLength(contour, True), True)
        if len(approx) == 4:
            # 计算面积,排除内外重合的情况
            area = cv2.contourArea(contour)
            if area > 100:  # 设定阈值,过滤小轮廓
                cv2.drawContours(image, [approx], -1, (0, 255, 0), 2)  # 绿色标记外边框
            else:
                cv2.drawContours(image, [approx], -1, (0, 0, 255), 2)  # 红色标记内边框
    
    # 显示结果
    cv2.imshow("Detected Hollow Rectangle", image)
    cv2.waitKey(0)
    cv2.destroyAllWindows()
    

    代码说明

    1. 边缘检测:通过Canny算法提取图像边缘。
    2. 轮廓查找:使用findContours函数查找所有轮廓,并使用approxPolyDP判定顶点数是否为4。
    3. 面积判断:通过设置面积阈值区分内外轮廓。
    4. 结果显示:以绿色显示外框,以红色显示内框。

    注意事项

    • 根据实际图像调整Canny参数和面积阈值。
    • 如果轮廓较复杂,可以进一步细化形状特征进行判别。

    如有帮助,题主可以帮忙采纳一下嘛,谢谢~

    评论

报告相同问题?

问题事件

  • 修改了问题 10月27日
  • 创建了问题 10月27日

悬赏问题

  • ¥15 如何让企业微信机器人实现消息汇总整合
  • ¥50 关于#ui#的问题:做yolov8的ui界面出现的问题
  • ¥15 如何用Python爬取各高校教师公开的教育和工作经历
  • ¥15 TLE9879QXA40 电机驱动
  • ¥20 对于工程问题的非线性数学模型进行线性化
  • ¥15 Mirare PLUS 进行密钥认证?(详解)
  • ¥15 物体双站RCS和其组成阵列后的双站RCS关系验证
  • ¥20 想用ollama做一个自己的AI数据库
  • ¥15 关于qualoth编辑及缝合服装领子的问题解决方案探寻
  • ¥15 请问怎么才能复现这样的图呀