Exemplo n.º 1
0
def main():
    """ Displayes the image file given as first parameter on the command line. """
    if len(sys.argv) > 1:
        fn = sys.argv[1]
        print 'loading %s ...' % fn
        img = TIFF(fn)
        bit = img.depth
    else:
        print __doc__
        print 'USAGE: %s [image filename]\n' % sys.argv[0]
        sys.exit(1)

    print("Minimum and maximum pixel values in the image: Min: %d Max: %d" % img.minmax)
    print("Rescaling to fill full 16bit space.")

    img.data = img.rescale()

    # determine screen size (see http://stackoverflow.com/a/3949983/183995 )
    root = Tkinter.Tk()
    screen_width, screen_height = root.winfo_screenwidth(), root.winfo_screenheight()
    small = img
    while small.dimensions[0] > screen_height or small.dimensions[1] > screen_width:
        small.scale_down_to_half()

    def onmouse(event, x, y, flags, param):
        h, w = img.dimensions
        hs, ws = small.dimensions
        x, y = int(1.0*x*h/hs), int(1.0*y*h/hs)
        show_zoom(x,y)

    zoom_window_size = 466
    zoom_factor = 3
    zoom = np.zeros((zoom_window_size, zoom_window_size),img.data.dtype)
    def show_zoom(x,y):
        h, w = img.dimensions
        img_box = rectangle()
        img_box.pos = coordinates(0,0)
        img_box.dim = coordinates(w,h)
        box = img_box.get_rectangle_inside(zoom_window_size/zoom_factor, coordinates(x,y))
        f, t = box.corners()
        #zoom = cv2.getRectSubPix(img, (800, 600), (x+0.5, y+0.5))
        #cv2.GetSubRect(img, (60, 70, 32, 32))
        #zoom = cv2.getRectSubPix(img, (200, 200), (x, y))
        #zoom = img[f.y:t.y, f.x:t.x]
        ## http://docs.opencv.org/modules/imgproc/doc/geometric_transformations.html#resize
        cv2.resize(img.data[f.y:t.y, f.x:t.x], dsize=(zoom_window_size,zoom_window_size), dst=zoom, interpolation=cv2.INTER_NEAREST)
        cv2.imshow('Detail', zoom)
    cv2.namedWindow("Detail")
    cv2.moveWindow("Detail", 5, 50+small.dimensions[0])
    cv2.imshow('Overview', small.data)
    cv2.moveWindow("Overview", 5, 20)
    show_zoom(0,0)
    cv2.setMouseCallback('Overview', onmouse)
    cv2.waitKey()