Can we expand an image?
We know that we can use seam carving to reduce the width of an image without deteriorating the interesting regions. So naturally, we need to ask ourselves if we can expand an image without deteriorating the interesting regions? As it turns out, we can do it using the same logic. When we compute the seams, we just need to add an extra column instead of deleting it.
If you expand the ducks image naively, it will look something like this:
If you do it in a smarter way, that is, by using seam carving, it will look something like this:
As you can see here, the width of the image has increased and the ducks don't look stretched. Following is the code to do it:
import sys import cv2 import numpy as np # Compute the energy matrix from the input image def compute_energy_matrix(img): gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) sobel_x = cv2.Sobel(gray, cv2.CV_64F, 1, 0, ksize=3) sobel_y = cv2.Sobel(gray, cv2.CV_64F, 0, 1, ksize=3) abs_sobel_x = cv2.convertScaleAbs...