Пример #1
0
def merge_ims(srcs, pts_or_rects, bg, opt = None):
  """ Makes a new image where each image in patches is copied at a
  corresponding pixel location.  Overlapping images are averaged
  together. """
  dst = bg.copy()
  layer = np.zeros(dst.shape)
  counts = np.zeros(dst.shape[:2], 'l')
  for src, r in itl.izip(srcs, pts_or_rects):
    r = ut.int_tuple(r)
    x, y = r[:2]

    # rescale if we're given a rectangle, and it has a different size
    if len(r) > 2:
      assert len(r) == 4
      assert opt != 'center'
      if src.shape[:2] != (r[3], r[2]):
        src = resize(src, (r[3], r[2]))
    elif opt == 'center':
      x -= src.shape[1]/2
      y -= src.shape[0]/2

    # crop intersecting 
    dx, dy, dw, dh = ut.crop_rect_to_img((x, y, src.shape[1], src.shape[0]), dst)
    sx = dx - x
    sy = dy - y
    layer[dy : dy + dh, dx : dx + dw] += src[sy : sy + dh, sx : sx + dw]
    counts[dy : dy + dh, dx : dx + dw] += 1
  dst[counts > 0] = layer[counts > 0] / counts[counts > 0][:, np.newaxis]
  return dst
Пример #2
0
def merge_ims(srcs, pts_or_rects, bg, opt=None):
    """ Makes a new image where each image in patches is copied at a
  corresponding pixel location.  Overlapping images are averaged
  together. """
    dst = rgb_from_gray(bg)
    layer = np.zeros(dst.shape)
    #counts = np.zeros(dst.shape[:2], 'l')
    counts = np.zeros(dst.shape[:2], 'd')
    for src, r in itl.izip(srcs, pts_or_rects):
        r = ut.int_tuple(r)
        x, y = r[:2]

        # rescale if we're given a rectangle, and it has a different size
        if len(r) > 2:
            assert len(r) == 4
            assert opt != 'center'
            if src.shape[:2] != (r[3], r[2]):
                src = resize(src, (r[3], r[2]))
        elif opt == 'center':
            x -= src.shape[1] / 2
            y -= src.shape[0] / 2

        # crop intersecting
        dx, dy, dw, dh = ut.crop_rect_to_img(
            (x, y, src.shape[1], src.shape[0]), dst)
        sx = dx - x
        sy = dy - y
        layer[dy:dy + dh, dx:dx + dw] += src[sy:sy + dh, sx:sx + dw, :3]
        if np.ndim(src) == 3 and src.shape[2] == 4:
            counts[dy:dy + dh, dx:dx +
                   dw] += np.array(src[sy:sy + dh, sx:sx + dw, 3], 'd') / 255.
        else:
            counts[dy:dy + dh, dx:dx + dw] += 1
    dst[counts > 0] = layer[counts > 0] / counts[counts > 0][:, np.newaxis]
    return dst
Пример #3
0
def weighted_add(src, dst, x, y, src_weight, dst_weight, opt = None):
  if opt == 'center':
    x -= src.shape[1]/2
    y -= src.shape[0]/2
  # crop intersecting 
  dx, dy, dw, dh = ut.crop_rect_to_img((x, y, src.shape[1], src.shape[0]), dst)
  sx = dx - x
  sy = dy - y
  dst[dy : dy + dh, dx : dx + dw] = dst[dy : dy + dh, dx : dx + dw]*dst_weight + src[sy : sy + dh, sx : sx + dw]*src_weight
Пример #4
0
def weighted_add(src, dst, x, y, src_weight, dst_weight, opt = None):
  if opt == 'center':
    x -= src.shape[1]/2
    y -= src.shape[0]/2
  # crop intersecting 
  dx, dy, dw, dh = ut.crop_rect_to_img((x, y, src.shape[1], src.shape[0]), dst)
  sx = dx - x
  sy = dy - y
  dst[dy : dy + dh, dx : dx + dw] = dst[dy : dy + dh, dx : dx + dw]*dst_weight + src[sy : sy + dh, sx : sx + dw]*src_weight
Пример #5
0
    vals.append(v.reshape(im.shape[:2] + (1,)))
  return np.concatenate(vals, axis = 2)
    
  
def stack_meshgrid(xs, ys, dtype = 'l'):
  x, y = np.meshgrid(xs, ys)
  return np.array(np.concatenate([x[..., np.newaxis], y[..., np.newaxis]], axis = 2), dtype = dtype)

def sub_img_pad(im, (x, y, w, h), oob = 0):
  if len(im.shape) == 2:
    dst = np.zeros((h, w))
  else:
    dst = np.zeros((h, w, im.shape[2]))

  dst[:] = oob
  sx, sy, sw, sh = ut.crop_rect_to_img((x, y, w, h), im)
  dst[(sy - y) : (sy - y) + sh,
      (sx - x) : (sx - x) + sw] = im[sy : sy + sh, sx : sx + sw]
  return dst

def compress(im, format = 'png'):
  out = StringIO()
  im = to_pil(im)
  im.save(out, format = format)
  c = out.getvalue()
  out.close()
  return c

def uncompress(s):
  return from_pil(Image.open(StringIO(s)))
Пример #6
0
def stack_meshgrid(xs, ys, dtype='l'):
    x, y = np.meshgrid(xs, ys)
    return np.array(np.concatenate([x[..., np.newaxis], y[..., np.newaxis]],
                                   axis=2),
                    dtype=dtype)


def sub_img_pad(im, (x, y, w, h), oob=0):
    if len(im.shape) == 2:
        dst = np.zeros((h, w))
    else:
        dst = np.zeros((h, w, im.shape[2]))

    dst[:] = oob
    sx, sy, sw, sh = ut.crop_rect_to_img((x, y, w, h), im)
    dst[(sy - y):(sy - y) + sh, (sx - x):(sx - x) + sw] = im[sy:sy + sh,
                                                             sx:sx + sw]
    return dst


def sub_img_reflect(im, (x, y, w, h)):
    x, y, w, h = map(ut.iround, [x, y, w, h])
    yy, xx = np.mgrid[y:y + h, x:x + w]
    vals = np.uint8(
        lookup_bilinear(im,
                        xx.flatten(),
                        yy.flatten(),
                        order=0,
                        mode='reflect'))
    return vals.reshape((h, w, im.shape[2]))