


二值化后的图像得到了,检测了轮廓,绘制了轮廓,最后在img图上绘制外接矩形,为什么显示不出来
从你提供的代码来看,有几个地方可能导致外接矩形没有正确绘制出来:
在获取轮廓时,使用的是 cv2.findContours() 函数,但是参数设置可能有问题。你应该使用 cv2.RETR_EXTERNAL 而不是 cv2.RETR_EXTERNAL,并且 cv2.CHAIN_APPROX_SIMPLE 应该是 cv2.CHAIN_APPROX_SIMPLE 或者 cv2.CHAIN_APPROX_NONE。
绘制外接矩形的部分,你使用了 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()
请尝试运行上述代码,看看是否能够正确地绘制出外接矩形。