我使用 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 信息,以便我可以在图像上正确绘制准确的框。
添加回答
举报
0/150
提交
取消