梁爽Shuang 2024-10-27 23:38 采纳率: 72.5%
浏览 5
已结题

为什么没有画出来外接矩形

img

img

img


二值化后的图像得到了,检测了轮廓,绘制了轮廓,最后在img图上绘制外接矩形,为什么显示不出来

  • 写回答

1条回答 默认 最新

  • 上了年纪的牛马 2024-10-28 09:10
    关注

    从你提供的代码来看,有几个地方可能导致外接矩形没有正确绘制出来:

    1. 在获取轮廓时,使用的是 cv2.findContours() 函数,但是参数设置可能有问题。你应该使用 cv2.RETR_EXTERNAL 而不是 cv2.RETR_EXTERNAL,并且 cv2.CHAIN_APPROX_SIMPLE 应该是 cv2.CHAIN_APPROX_SIMPLE 或者 cv2.CHAIN_APPROX_NONE

    2. 绘制外接矩形的部分,你使用了 cv2.rectangle() 函数,但是在调用之前并没有定义 rect 变量。你需要先找到轮廓的边界框,然后再绘制矩形。

    修复这些问题后,你的代码应该如下所示:

    import cv2
    import numpy as np
    
    # 加载图像
    img = cv2.imread('homework\\A.jpg')
    
    # 转换到HSV颜色空间
    hsv_img = cv2.cvtColor(img, cv2.COLOR_BGR2HSV)
    
    # 高斯模糊
    blurred_img = cv2.GaussianBlur(hsv_img, (7, 7), 1.5)
    
    # 定义红色范围
    red_lower = np.array([0, 100, 100])
    red_upper = np.array([10, 255, 255])
    
    # 创建掩码
    mask_red = cv2.inRange(blurred_img, red_lower, red_upper)
    
    # 膨胀操作
    kernel = cv2.getStructuringElement(cv2.MORPH_CROSS, (3, 3))
    dilated_mask = cv2.dilate(mask_red, kernel, iterations=1)
    
    # 查找轮廓
    contours, _ = cv2.findContours(dilated_mask, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)
    
    # 绘制外接矩形
    for contour in contours:
        rect = cv2.boundingRect(contour)
        cv2.rectangle(img, rect[0], rect[1] + rect[3], (0, 255, 0), 2)
    
    # 显示结果
    cv2.imshow('Result', img)
    cv2.waitKey(0)
    cv2.destroyAllWindows()
    

    请尝试运行上述代码,看看是否能够正确地绘制出外接矩形。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 系统已结题 11月5日
  • 已采纳回答 10月28日
  • 创建了问题 10月27日