问题描述:YOLOv7预测框的粗细怎么调整
解决办法:修改cv2.rectangle()函数中的参数值。
提醒:
cv2.rectangle()函数是OpenCV库中用于绘制矩形的函数,它的参数如下:
1. img:要绘制矩形的图像。2. pt1:表示矩形的一个顶点,为一个二维元组或数组,例如(pt1_x, pt1_y)。3. pt2:表示矩形的另一个顶点,同样为一个二维元组或数组,例如(pt2_x, pt2_y)。4. color:矩形的颜色,可以是一个表示颜色的三元组或一个预定义的颜色常量,例如(255,0,0)表示红色。5. thickness:线宽,表示矩形的边框粗细,默认为1。6. lineType:线的类型,可选参数。默认为cv2.LINE_8,表示8连线,在边框的八个相邻点之间绘制直线。你还可以选择cv2.LINE_4、cv2.LINE_AA等其他类型的线。
7. shift:可选参数,用于对坐标点进行缩放和平移。
所以我们修改 thickness参数。修改前代码为cv2.rectangle(img, c1, c2, color, thickness=tl, lineType=cv2.LINE_AA),将thickness=tl修改为thickness=10
修改的代码处于的位置。yolov7/utils/plots.py中的def plot_one_box(x, img, color=None, label=None, line_thickness=10)函数里面
def plot_one_box(x, img, color=None, label=None, line_thickness=10):# Plots one bounding box on image imgtl = line_thickness or round(0.002 * (img.shape[0] + img.shape[1]) / 2) + 1 # line/font thicknesscolor = color or [random.randint(0, 255) for _ in range(3)]c1, c2 = (int(x[0]), int(x[1])), (int(x[2]), int(x[3]))cv2.rectangle(img, c1, c2, color, thickness=tl, lineType=cv2.LINE_AA)if label:tf = max(tl - 1, 1) # font thicknesst_size = cv2.getTextSize(label, 0, fontScale=tl / 3, thickness=tf)[0]c2 = c1[0] + t_size[0], c1[1] - t_size[1] - 3cv2.rectangle(img, c1, c2, color, 20, cv2.LINE_AA) # filledcv2.putText(img, label, (c1[0], c1[1] - 2), 0, tl / 3, [225, 255, 255], thickness=tf, lineType=cv2.LINE_AA)
疑惑:我刚开始调整的line_width参数没有用;在detect.py里面加入这一行也是没有用的(这个方法是在其他博主那看到的);修改其他行处的 line_thickness也是没有用的;最后试了一下将thickness=tl修改为thickness=10是有用的。