Esempio n. 1
0
    def do_screen(self):
        """usage: screen <image:pic1> <image:pic2>

        Pop the two top images, superimpose their inverted versions.
        """
        import ImageChops
        image2 = self.do_pop()
        image1 = self.do_pop()
        self.push(ImageChops.screen(image1, image2))
Esempio n. 2
0
    def do_screen(self):
        """usage: screen <image:pic1> <image:pic2>

        Pop the two top images, superimpose their inverted versions.
        """
        import ImageChops
        image2 = self.do_pop()
        image1 = self.do_pop()
        self.push(ImageChops.screen(image1, image2))
Esempio n. 3
0
def screen_mode(im, wm, wmbuffer):
    imsize = im.size
    wmsize = wm.size
    brightness = float(_OPACITY) / 100
    brightval = int(round(255 * brightness))
    wm_pos = _wm_pos(wmbuffer, imsize, wmsize)
    black_bg = Image.new('RGB', imsize, (0, 0, 0) )
    black_bg.paste(wm, wm_pos)
    darkener = Image.new('RGB', imsize, (brightval, brightval, brightval) )
    darkened_fit_wm = ImageChops.multiply(black_bg, darkener)
    return ImageChops.screen(darkened_fit_wm, im)
Esempio n. 4
0
    def contrastMask(self, outfile):
        """Ceci est un filtre de debouchage de photographies, aussi appelé masque de contraste,
        il permet de rattrapper une photo trop contrasté, un contre jour, ...
        Écrit par Jérôme Kieffer, avec l'aide de la liste python@aful,
        en particulier A. Fayolles et F. Mantegazza avril 2006
        necessite numpy et PIL.

        @param: the name of the output file (JPEG)
        @return: filtered Photo instance
        """

        try:
            import numpy
#            import scipy.signal as signal
        except:
            logger.error("This filter needs the numpy library available on https://sourceforge.net/projects/numpy/files/")
            return

        t0 = time.time()
        dimX, dimY = self.pil.size

        ImageFile.MAXBLOCK = dimX * dimY
        img_array = numpy.fromstring(self.pil.tostring(), dtype="UInt8").astype("float32")
        img_array.shape = (dimY, dimX, 3)
        red, green, blue = img_array[:, :, 0], img_array[:, :, 1], img_array[:, :, 2]
        # nota: this is faster than desat2=(ar.max(axis=2)+ar.min(axis=2))/2
        desat_array = (numpy.minimum(numpy.minimum(red, green), blue) + numpy.maximum(numpy.maximum(red, green), blue)) / 2.0
        inv_desat = 255. - desat_array
        blured_inv_desat = self._gaussian.blur(inv_desat, config.ContrastMaskGaussianSize)
        bisi = numpy.round(blured_inv_desat).astype("uint8")
        k = Image.fromarray(bisi, "L").convert("RGB")
        S = ImageChops.screen(self.pil, k)
        M = ImageChops.multiply(self.pil, k)
        F = ImageChops.add(ImageChops.multiply(self.pil, S), ImageChops.multiply(ImageChops.invert(self.pil), M))
        dst_filename = op.join(config.DefaultRepository, outfile)
        F.save(dst_filename, quality=80, progressive=True, Optimize=True)
        try:
            os.chmod(dst_filename, config.DefaultFileMode)
        except IOError:
            logger.error("Unable to chmod %s" % outfile)
        exifJpeg = Exif(dst_filename)
        exifJpeg.read()
        self.exif.copy(exifJpeg)
        exifJpeg.comment = self.exif.comment
        logger.debug("Write metadata to %s", dst_filename)
        exifJpeg.write()
        logger.info("The whoole contrast mask took %.3f" % (time.time() - t0))
        res = Photo(outfile)
        res.autorotate()
        return res
def screenMode(im, wm, opacityVal, position, wmbuffer):

    imsize = im.size
    wmsize = wm.size

    brightnuss = float(opacityVal) / 100
    brightval = int(round(255 * brightnuss))

    wmPos = wmCalculatePos(position, wmbuffer, imsize, wmsize)

    blackTempBG = Image.new("RGB", imsize, (0, 0, 0))
    blackTempBG.paste(wm, wmPos)

    darkener = Image.new("RGB", imsize, (brightval, brightval, brightval))
    darkenedFitWm = ImageChops.multiply(blackTempBG, darkener)

    out = ImageChops.screen(darkenedFitWm, im)

    return out
Esempio n. 6
0
 def r5(self):
     self.im3=ImageChops.screen(self.im,self.im0)
     self.tkimage.paste(self.im3)
Esempio n. 7
0
root = Tkinter.Tk()
root.resizable(0, 0)

im_size = 640

image1 = Image.open('b1.png')
ratio = float(image1.size[0]) / float(image1.size[1])
image1 = image1.resize((im_size, int(im_size / ratio)), Image.ANTIALIAS)
tkimage1 = ImageTk.PhotoImage(image1)
image2 = Image.open('b2.png')
image2 = image2.resize((im_size, int(im_size / ratio)), Image.ANTIALIAS)
tkimage2 = ImageTk.PhotoImage(image2)
diff = ImageChops.difference(image1, image2)
diff = diff.resize((im_size, int(im_size / ratio)), Image.ANTIALIAS)
tk_diff = ImageTk.PhotoImage(diff)
overlay = ImageChops.screen(image1, image2)
overlay = overlay.resize((im_size, int(im_size / ratio)), Image.ANTIALIAS)
tk_overlay = ImageTk.PhotoImage(overlay)

root.geometry('%dx%d' % (image1.size[0] * 2, image1.size[1] * 2))
label_image1 = Tkinter.Label(root, image=tkimage1)
label_image2 = Tkinter.Label(root, image=tkimage2)
label_diff = Tkinter.Label(root, image=tk_diff)
label_overlay = Tkinter.Label(root, image=tk_overlay)

label_image1.place(x=0, y=0, width=im_size, height=int(im_size / ratio))
label_image2.place(x=im_size, y=0, width=im_size, height=int(im_size / ratio))
label_diff.place(x=0,
                 y=int(im_size / ratio),
                 width=im_size,
                 height=int(im_size / ratio))
    def contrastMask(self, outfile):
        """Ceci est un filtre de debouchage de photographies, aussi appelé masque de contraste, 
        il permet de rattrapper une photo trop contrasté, un contre jour, ...
        Écrit par Jérôme Kieffer, avec l'aide de la liste python@aful, 
        en particulier A. Fayolles et F. Mantegazza avril 2006
        necessite numpy et PIL.
        
        @param: the name of the output file (JPEG)
        @return: filtered Photo instance
        """

        try:
            import numpy
#            import scipy.signal as signal
        except:
            logger.error("This filter needs the numpy library available on https://sourceforge.net/projects/numpy/files/")
            return

        t0 = time.time()
        dimX, dimY = self.pil.size

        ImageFile.MAXBLOCK = dimX * dimY
        img_array = numpy.fromstring(self.pil.tostring(), dtype="UInt8").astype("float32")
        img_array.shape = (dimY, dimX, 3)
        red, green, blue = img_array[:, :, 0], img_array[:, :, 1], img_array[:, :, 2]
        #nota: this is faster than desat2=(ar.max(axis=2)+ar.min(axis=2))/2
        desat_array = (numpy.minimum(numpy.minimum(red, green), blue) + numpy.maximum(numpy.maximum(red, green), blue)) / 2.0
        inv_desat = 255. - desat_array
        blured_inv_desat = self._gaussian.blur(inv_desat, config.ContrastMaskGaussianSize)
        bisi = numpy.round(blured_inv_desat).astype("uint8")
        k = Image.fromarray(bisi, "L").convert("RGB")
        S = ImageChops.screen(self.pil, k)
        M = ImageChops.multiply(self.pil, k)
        F = ImageChops.add(ImageChops.multiply(self.pil, S), ImageChops.multiply(ImageChops.invert(self.pil), M))
        exitJpeg = op.join(config.DefaultRepository, outfile)
        F.save(exitJpeg, quality=80, progressive=True, Optimize=True)
        try:
            os.chmod(exitJpeg, config.DefaultFileMode)
        except IOError:
            logger.error("Unable to chmod %s" % outfile)
        exifJpeg = Exif(exitJpeg)
        exifJpeg.read()
        self.exif.copy(exifJpeg)
        exifJpeg.comment = self.exif.comment
#
#        for metadata in [ 'Exif.Image.Make', 'Exif.Image.Model', 'Exif.Photo.DateTimeOriginal',
#                         'Exif.Photo.ExposureTime', 'Exif.Photo.FNumber', 'Exif.Photo.ExposureBiasValue',
#                         'Exif.Photo.Flash', 'Exif.Photo.FocalLength', 'Exif.Photo.ISOSpeedRatings',
#                         "Exif.Image.Orientation", "Exif.Photo.UserComment"
#                         ]:
#            if metadata in self.exif:
#                logger.debug("Copying metadata %s", metadata)
#                try:
#                    exifJpeg[metadata] = self.exif[metadata]
#                except KeyError:
#                    pass #'Tag not set'-> unable to copy it
#                except:
#                    logger.error("Unable to copying metadata %s in file %s, value: %s" % (metadata, self.filename, self.exif[metadata]))
        logger.debug("Write metadata to %s", exitJpeg)
        exifJpeg.write()
        logger.info("The whoole contrast mask took %.3f" % (time.time() - t0))
        return Photo(outfile)
Esempio n. 9
0
root = Tkinter.Tk()
root.resizable(0,0)

im_size = 640

image1 = Image.open('b1.png')
ratio = float(image1.size[0]) / float(image1.size[1])
image1 = image1.resize((im_size,int(im_size / ratio)), Image.ANTIALIAS)
tkimage1 = ImageTk.PhotoImage(image1)
image2 = Image.open('b2.png')
image2 = image2.resize((im_size,int(im_size / ratio)), Image.ANTIALIAS)
tkimage2 = ImageTk.PhotoImage(image2)
diff = ImageChops.difference(image1, image2)
diff = diff.resize((im_size,int(im_size / ratio)), Image.ANTIALIAS)
tk_diff = ImageTk.PhotoImage(diff)
overlay = ImageChops.screen(image1, image2)
overlay = overlay.resize((im_size,int(im_size / ratio)), Image.ANTIALIAS)
tk_overlay = ImageTk.PhotoImage(overlay)

root.geometry('%dx%d' % (image1.size[0] * 2,image1.size[1] * 2))
label_image1 = Tkinter.Label(root, image=tkimage1)
label_image2 = Tkinter.Label(root, image=tkimage2)
label_diff = Tkinter.Label(root, image=tk_diff)
label_overlay = Tkinter.Label(root, image=tk_overlay)

label_image1.place(x=0,y=0,width=im_size,height=int(im_size/ratio))
label_image2.place(x=im_size,y=0,width=im_size,height=int(im_size/ratio))
label_diff.place(x=0,y=int(im_size/ratio),width=im_size,height=int(im_size/ratio))
label_overlay.place(x=im_size,y=int(im_size/ratio),width=im_size,height=int(im_size/ratio))

root.title("Image diff")
Esempio n. 10
0
def merge_layers_screen(layer1, layer2, opacity2):
	opacity2 = max(min(opacity2, 1), 0)
	if opacity2 < 1:
		layer2 = _set_opacity_layer(layer2, opacity2)
	return ImageChops.screen(layer1, layer2)
Esempio n. 11
0
    is_sand = morphology.binary_closing(opened, se)
  # Use coral mask to exclude sand.
  is_sand = is_sand & ~is_coral
  return is_sand, is_coral

import glob
#for fname in sorted(glob.glob("/media/spanky/thesis-revision/datasets/B/*.png")):
for fname in sorted(glob.glob("./coral_imagery/TIFF/*.tif")):
  print fname
  img = Image.open(fname)
  # Values from SSF work
  #sand, coral = jeff_coral_finder(img, 205, 15, 8, 85, [.33333,.33333,.33333])
  # Values from Training set
  #sand, coral = jeff_coral_finder(img, 189, 11, 8, 50.4858, [.7762,.2288,-.5874])

  # Chris's values for dataset B
  sand, coral = jeff_coral_finder(img, 255, 30, 8, 30, [.3333, .3333,.3333])

  # Now generate a composite image.
  orange_mask = N.dstack((coral, coral, coral)) * [200, 168, 50]
  green_mask = N.dstack((sand, sand, sand)) * [255, 190, 190]
  green_mask[green_mask==0] = 255
  orange_mask = Image.fromarray(N.cast['uint8'](orange_mask))
  green_mask = Image.fromarray(N.cast['uint8'](green_mask))
  masked = ImageChops.multiply(img, green_mask)
  masked = ImageChops.screen(masked, orange_mask)
  new_fname = "output/masked-" + fname.rpartition("/")[2]
  print new_fname
  masked.save(new_fname)