Python Image Morpher Versions Save

Python Image Morpher (PIM) is a program that blends images to your content!

v0.2.9.0

3 years ago

Known Bugs

  • The GUI can sometimes become unresponsive during morphing calculations (but eventually returns to normal)
    • QtCore.QCoreApplication.processEvents() is a potential workaround but currently produces buggy results

Added

  • Source Image Resizing
    • Since PIM requires the user's images to be the same size, it can now create and hotswap resized copies of the left/right images at the click of a button
    • For simplicity, one button resizes the left image to the right image's dimensions and the other button does the opposite
      • Both images must be loaded to enable this functionality
      • Additionally scales any added/confirmed/chosen points to the new image dimensions
      • Buttons will be set to bold whenever the user's images aren't the same size
    • Resized image files are stored under: ROOT_DIR/Images_Points/filename-[width]x[height].filetype
    • Resized text files are stored under: ROOT_DIR/Images_Points/filename-[width]x[height]-filetype.txt

Changes

  • The program now locks out usage of point placement as well as the Add Corners button when the user's images aren't the same size
  • Text files are now stored under: ROOT_DIR/Images_Points/filename-filetype.txt

v0.2.8.2

3 years ago

Changes

  • resizeEvent() has received a performance boost
  • Memory Optimization: Removed all instances of the variables used to:
    • Flag when the GUI was being resized: self.resizeFlag
    • Flag when left/right images were loaded: self.leftOn, self.rightOn
    • Flag whether left/right images were PNGs: self.leftPNG, self.rightPNG, leftTypeRegex, rightTypeRegex
    • Flag whether the smoothing box was checked: self.smoothBoxSetting
    • Flag whether the transparency box was checked: self.transparencySetting
    • Flag whether the full blend box was checked: self.blendBoxSetting
    • Flag whether the user has performed a morph in the current session: self.blendExecuted
    • Store triangle color slider values: self.redVal, self.blueVal, self.greenVal
    • Store an additional copy (!!!) of each image's chosen points: self.startingText, self.endingText

Fixes

  • Fixed a long-standing bug where .jpg blends could sometimes appear in the GUI to be wildly distorted and - occasionally - grayscale
  • autoCorner() now checks that neither image contains each corner point before adding it

v0.2.8.1

3 years ago

Fixes

  • Hotfixed a bug where verifyValue() for the frame time textbox was accepting 0 as a valid number

v0.2.8.0

3 years ago

Added

  • Morphed Image Saving
    • Normal blends can now be saved as their respective image types; full blends can now be saved as dynamic GIFs
      • Generated GIFs are subject to the user's preference for the amount of time (default: 100 ms) given to each frame

Changes

  • To accommodate this update, the following elements in MorphingGUI.ui and MorphingGUI.py have been changed:
    • Added a "Save Image(s)" button alongside a smaller frame time textbox
      • A fairly air-tight Qt mask is used to restrict letter and symbol input - format is "[0-9][0-9][0-9] ms"
      • The program handles other invalid inputs (000, no input)
    • Minimum size of the main window has changed from (878 x 797) to (878 x 850)

v0.2.7.0

3 years ago

Added

  • Morphed Image Smoothing
    • A toggleable median filter is now applied to every blend and full blend
      • This filter attempts to remove hot pixels in morphed images by utilizing neighboring pixel values instead
      • Very little to no impact on program performance

Changes

  • The GUI now displays the current image frame being generated when full blending is enabled
  • Removed two sub-module imports (Qt's QGraphicsScene & QGraphicsView) that were no longer in use

Fixes

  • Corrected an instance where the notification bar stated that the program was blending was in RGB mode instead of RGBA

v0.2.6.1

3 years ago

Changes

  • Optimizations to Morphing.py's loadTriangles() and getPoints() functions
    • Declarations, re-assignments, loops, and return statements have been streamlined to be more efficient
  • Optimized MorphingApp.py's blendImages() function to no longer have to [repeatedly] deepcopy each array slice
    • Initialization of a Morpher object will now deepcopy the passed arguments to its left and right image variables
  • Removed more unnecessary module dependencies

Fixes

  • Fixed a bug where .png (RGBA) images could only be morphed into .jpg images (RGB)

v0.2.6.0

3 years ago

Python Image Morpher is a program that can take two images and blend them to whatever extent or precision that you like! So far, it has only been tested on separate Windows environments; later releases are likely to support Mac and Linux.

Installation:

This program has dependencies that do not come packaged with Python 3.8. For each module below that your machine does not have installed, enter the respective command using the terminal supplied by Windows or your choice of IDE (such as PyCharm).

PyQt5 - pip install pyqt5 SciPy - pip install scipy NumPy - pip install numpy Matplotlib - pip install matplotlib

If pip, for whatever reason, is not installed on your machine, enter the following line in a terminal:

curl https://bootstrap.pypa.io/get-pip.py -o get-pip.py

Then navigate to the folder where get-pip.py was downloaded and enter the following line in a terminal:

python get-pip.py

Usage:

  • Run MorphingApp.py either through the terminal or using an IDE
  • Use the graphical interface to select your two images to morph
  • Click on points of interest in your images to create correspondences
  • When satisfied, click on blend and observe the result!