YOLOv5/v7改变预测框的标签文字大小

修改文件位于YOLO主路径下utils/plots.py

找到box_label函数,在该函数内修改,该函数分为两个部分,一部分使用PIL进行图片上文字添加,另一部分使用cv2实现图片上文字添加。

本博客只做了PIL下的标签大小修改,修改过程如下 

def box_label(self,
                  box,
                  label='',
                  color=(128, 128, 128),
                  txt_color=(255, 255, 255),
                  font_size=18): #在此处添加控制标签文字大小变量,一般为12时是保持当前大小
        if self.pil or not is_ascii(label):  #第一部分:使用PIL方式在图片上添加文字
            self.draw.rectangle(box, width=self.lw, outline=color)  # box
            if label:
                new_font = ImageFont.truetype(self.font.path,font_size) #创建一个新的font
                                             #将控制大小变量加入至新的font中
                w , h = self.draw.textsize(label,font=new_font) #改变w,h的获取方式
                #w, h = self.font.getsize(label)  # text width, height #原有的w,h获取方式
                outside = box[1] - h >= 0  # label fits outside box
                self.draw.rectangle([
                    box[0], box[1] - h if outside else box[1], box[0] + w + 1,
                    box[1] + 1 if outside else box[1] + h + 1
                ],
                                    fill=color)
                # self.draw.text((box[0], box[1]), label, fill=txt_color, font=self.font, anchor='ls')  # for PIL>8.0
                self.draw.text((box[0], box[1] - h if outside else box[1]),
                               label,
                               fill=txt_color,
                               font=new_font,
                                            )
        else:  # cv2 ,第二种方式,使用cv2在图片上添加文字,这里我没有进行更改
            p1, p2 = (int(box[0]), int(box[1])), (int(box[2]), int(box[3]))
            cv2.rectangle(self.im,
                          p1,
                          p2,
                          color,
                          thickness=self.lw,
                          lineType=cv2.LINE_AA)
            if label:
                tf = max(self.lw - 1, 1)  # font thickness
                w, h = cv2.getTextSize(label,
                                       0,
                                       fontScale=self.lw /3 ,
                                       thickness=tf)[0]  # text width, height
                outside = p1[1] - h - 3 >= 0  # label fits outside box
                p2 = p1[0] + w, p1[1] - h - 3 if outside else p1[1] + h + 3
                cv2.rectangle(self.im, p1, p2, color, -1,
                              cv2.LINE_AA)  # filled
                cv2.putText(self.im,
                            label,
                            (p1[0], p1[1] - 2 if outside else p1[1] + h + 2),
                            0,
                            self.lw / 3,
                            txt_color,
                            thickness=tf,
                            lineType=cv2.LINE_AA)

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值