为了账号安全,请及时绑定邮箱和手机立即绑定

如何重新缩放图像坐标的信息以处理类似图像的缩放版本

如何重新缩放图像坐标的信息以处理类似图像的缩放版本

绝地无双 2021-09-02 20:03:01
我使用 yolov3 来检测大小为 的框架中的对象416x416。我使用该边界框信息在该416x416图像上绘制框。但由于图片太小,我看不清,所以我用了同一个有暗淡的框架1920x1080。我想缩放边界框信息和 x,y 坐标,使其缩放到高暗图片,但我无法正确缩放它。显然信息是遥远的。笔记!在传递帧之前,我使用此方法将帧的大小从 1920,1080 调整为 416,416def letterbox_resize(img, size=(resized_image_size,resized_image_size), padColor=0):    h, w = img.shape[:2]    sh, sw = size    # interpolation method    if h > sh or w > sw: # shrinking image        interp = cv2.INTER_AREA    else: # stretching image        interp = cv2.INTER_CUBIC    # aspect ratio of image    aspect = w/h  # if on Python 2, you might need to cast as a float: float(w)/h    # compute scaling and pad sizing    if aspect > 1: # horizontal image        new_w = sw        new_h = np.round(new_w/aspect).astype(int)        pad_vert = (sh-new_h)/2        pad_top, pad_bot = np.floor(pad_vert).astype(int), np.ceil(pad_vert).astype(int)        pad_left, pad_right = 0, 0    elif aspect < 1: # vertical image        new_h = sh        new_w = np.round(new_h*aspect).astype(int)        pad_horz = (sw-new_w)/2        pad_left, pad_right = np.floor(pad_horz).astype(int), np.ceil(pad_horz).astype(int)        pad_top, pad_bot = 0, 0    else: # square image        new_h, new_w = sh, sw        pad_left, pad_right, pad_top, pad_bot = 0, 0, 0, 0    # set pad color    if len(img.shape) is 3 and not isinstance(padColor, (list, tuple, np.ndarray)): # color image but only one color provided        padColor = [padColor]*3    # scale and pad    scaled_img = cv2.resize(img, (new_w, new_h), interpolation=interp)    scaled_img = cv2.copyMakeBorder(scaled_img, pad_top, pad_bot, pad_left, pad_right, borderType=cv2.BORDER_CONSTANT, value=padColor)    return scaled_img如果有人帮助我编写一个脚本,该脚本将重新调整 yolo 预测的 x、y、w、h 信息,以便我可以在图像上正确绘制准确的框。
查看完整描述

1 回答

  • 1 回答
  • 0 关注
  • 327 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号