Home

Search John Harvey Photo for...
Advanced Search...
Photo Search Returned 1 to 20 of 79
Restrict search - time lapse AND: sunset 33 Vancouver 21 night 9 astrophotography 8 fireworks 8 fire 7
New search - Related Tags: Vancouver 289 night 206 fireworks 206 sunset 192 fire 103 astrophotography 27

Porteau Cove
This is a series of 500 images, taken from 3:27pm to 4:01. The interval is 4 seconds and the exposure on the bottom is 1/60th of a second. I think I basically landed on the starfish which is why it starts moving immediately.
John Harvey Photo > Blogs for 2025 to 2005 > May 2025 > Porteau Cove

Near Granville Island
The shot was 408 frames long, starting at 11:56am and finishing at 12:23pm. This is a timelapse of 48 images showing the parts that aren't boring. The interval is 4 seconds. Exposure is roughly 1/10th of a second.
John Harvey Photo > Blogs for 2025 to 2005 > May 2025 > Near Granville Island

Sunset From Radar Hill
Sunset From Radar Hill
John Harvey Photo > Blogs for 2025 to 2005 > Tofino 2025 > Sunset From Radar Hill

Green Anenome Closing
Green Anenome Closing
Species: Anthopleura xanthogrammica (giant green anemone)

John Harvey Photo > Blogs for 2025 to 2005 > Tofino 2025 > Green Anenome Closing

Kelp Crabs Being Crabs
Kelp Crabs Being Crabs
John Harvey Photo > Blogs for 2025 to 2005 > Tofino 2025 > Kelp Crabs Being Crabs

Sunset At Mackenzie Beach
Sunset At Mackenzie Beach
John Harvey Photo > Blogs for 2025 to 2005 > Tofino 2025 > Sunset At Mackenzie Beach

Last Of Cherry Blossums
Last Of Cherry Blossums
John Harvey Photo > Blogs for 2025 to 2005 > April 2025 > Last Of Cherry Blossums

Sunset Fireworks
This is shot from the Burrard Street Bridge.
John Harvey Photo > Blogs for 2025 to 2005 > July 2025 > Sunset Fireworks

Ogden Snails
This is 44 frames. Exposure is about 1/4 of a second per frame. Total Duration is about 7 minutes. The camera is moving almost every frame. Stabilization was done with photoshop layers.
John Harvey Photo > Blogs for 2025 to 2005 > April 2025 > Ogden Snails

Ogden Point Urchins
This is 66 images. Stabilization was done with a python script:
import cv2 
import numpy as np
import matplotlib.pyplot as plt
import pprint
import math


# /opt/homebrew/bin/ffmpeg -framerate 30 -pattern_type glob -i '*_EurchinsHg.jpg' -c:v libx264 -crf 20 EurchinsHg.mp4
# /opt/homebrew/bin/ffmpeg -i EurchinsHg.mp4 -vf "vidstabtransform=input=transforms.trf" -crf 20 EurchinsStabilized.mp4


def replace_color_with_image(background, overlay, target_color, tolerance, output_path):
    """
    Replaces a specific color in an image with another image.

    Args:
        background_path (str): Path to the background image.
        overlay_path (str): Path to the overlay image (can be the same as background if no overlay needed).
        target_color (tuple): RGB color to replace (e.g., (255, 0, 0) for red).
        tolerance (int): Tolerance range for color matching.
        replacement_image_path (str): Path to the replacement image.
        output_path (str): Path to save the output image.
    """
    if background is None or overlay is None:
        raise FileNotFoundError("One or more images not found.")

    # Create a mask for the target color
    lower_bound = np.array([max(0, c - tolerance) for c in target_color], dtype="uint8")
    upper_bound = np.array([min(255, c + tolerance) for c in target_color], dtype="uint8")
    mask = cv2.inRange(overlay, lower_bound, upper_bound)

    kernel = np.ones((3, 3), np.uint8) 
    dialated_mask = cv2.dilate(mask, kernel, iterations=1) 

    mask_rgb = cv2.merge((dialated_mask,dialated_mask,dialated_mask))

    mask_inv = cv2.bitwise_not(dialated_mask)
    mask_inv_rgb = cv2.merge((mask_inv,mask_inv,mask_inv))

    masked_background = cv2.bitwise_and(mask_rgb, background) # pixels from background where target_color is in the overlay.
    masked_overlay = cv2.bitwise_and(mask_inv_rgb, overlay) # pixels from background where target_color is in the overlay.
    combined = cv2.add(masked_background, masked_overlay)


    cv2.imwrite(output_path, combined)



f = open("transforms.trf", "w")
f.write("VID.STAB 1")
f.write("#      accuracy = 15")
f.write("#     shakiness = 3")
f.write("#      stepsize = 4")
f.write("#   mincontrast = 0.200000")
f.write("Frame 1 (List 0 [])
")

img1 = cv2.imread('0012_EurchinsHg.jpg')  
mask = cv2.imread('mask.png', cv2.IMREAD_GRAYSCALE)

currentMask = mask

#sift
sift = cv2.SIFT_create()

keypoints_1, descriptors_1 = sift.detectAndCompute(img1,mask)

for n in range(1,67): # Remember to +1 the end number.
    print("Frame " + str(n))
    img2 = cv2.imread("{:04d}_EurchinsHg.jpg".format(n)) 
    #img2 = cv2.cvtColor(img2, cv2.COLOR_BGR2GRAY)

    keypoints_2, descriptors_2 = sift.detectAndCompute(img2,currentMask)

    #feature matching
    bf = cv2.BFMatcher(cv2.NORM_L1, crossCheck=True)

    matches = bf.match(descriptors_1,descriptors_2)
    matches = sorted(matches, key = lambda x:x.distance)

    # Get key points
    points1 = np.float32([keypoints_1[m.queryIdx].pt for m in matches]).reshape(-1, 1, 2)
    points2 = np.float32([keypoints_2[m.trainIdx].pt for m in matches]).reshape(-1, 1, 2)

    # Affine matrix
    matrix, _ = cv2.findHomography(points2, points1, cv2.RANSAC, ransacReprojThreshold=5.0)


    # Align
    new_background_color = (0, 255, 0)  # Green

    aligned_image = cv2.warpPerspective(img2, matrix, (img1.shape[1], img1.shape[0]), borderValue=new_background_color)

    replace_color_with_image(img1, aligned_image, new_background_color, 1, "aligned_{:04d}_EurchinsHg.jpg".format(n))


f.close()
The actual stabilization is done with ffmpeg:
/opt/homebrew/bin/ffmpeg -framerate 30 -pattern_type glob -i 'aligned_*_EurchinsHg.jpg' -c:v libx264 -crf 20 AlignedEurchinsHg.mp4
Species: Strongylocentrotus droebachiensis (Green Sea Urchin), Strongylocentrotus purpuratus (Purple Sea Urchin)

John Harvey Photo > Blogs for 2025 to 2005 > April 2025 > Ogden Point Urchins

Neon In The Rain
Neon In The Rain
John Harvey Photo > Trips out of the Country > Hong Kong 15 > Neon In The Rain

Malaysia Fireworks
This is 5 different timelapses joined together. It starts with a sunset shot (8pm - every 8 seconds). After the sun set, I focused on the human powered boats, still shot aperture priority. After the sun was really set (perhaps 9:50), I switched to manual model at f8, 5 second exposure every 6 seconds. I shot three different angles.
This sequence is 1247 images.
John Harvey Photo > Blogs for 2025 to 2005 > July 2024 > Malaysia Fireworks

Portugal Sunset Fireworks
Photography started at 8:31pm and I took a photo every 6 seconds until 10:31 - 1205 photos. Expose started at f8, 1/250th of a second at ISO 100 and ended at f8, 5 seconds at ISO 1600. It is shot aperture priority (f8) with the time limited to 5 seconds and the sensitivity on auto. I use LRTimeLapse to adjust the exposure and FinalCut Pro to reduce some of the bumps (but two are still visible). It's shot full resolution (8105 x 5403) in raw (maybe 14 bit) so I can take individual images out later. Focal length was set to 27mm.
John Harvey Photo > Blogs for 2025 to 2005 > July 2024 > Portugal Sunset Fireworks

Cabo Sunset
I needed to stabilize this image (I forgot to turn off the auto focus) so I used Final Cut Pro.

This video is 948 images long. The first image was taken March 24th at 5:49:15pm and photos were taken every 8 seconds until 7:54:30pm. Exposure starts at f8, 1/400, ISO 100 and finished at f8, 6 seconds and ISO 1250. This is 11 + 1/3 stops in shutter time difference and 3 + 2/3 stops in ISO sensitivity to make 15 stops difference.

This is the view from the deck of the place we stayed (5351 in El Encanto De La Hacienda (the building) at Hacienda Encantada (resort name)).
John Harvey Photo > Trips out of the Country > Cabo San Lucas > Cabo Sunset

Cabo Sunset Stabilized
The black bars are my bad. I needed to stabilize this image (I forgot to turn off the auto focus) so I used Final Cut Pro. My Final Cut Pro project was set to 16:9 which gave it black bars.

This video is 948 images long. The first image was taken March 24th at 5:49:15pm and photos were taken every 8 seconds until 7:54:30pm. Exposure starts at f8, 1/400, ISO 100 and finished at f8, 6 seconds and ISO 1250. This is 11 + 1/3 stops in shutter time difference and 3 + 2/3 stops in ISO sensitivity to make 15 stops difference.

This is the view from the deck of the place we stayed (5351 in El Encanto De La Hacienda (the building) at Hacienda Encantada (resort name)).

Sunset From 733 Seymour
This is 740 frames. Started at 4:17pm at f8, 1/250th of a second. Ended at 5:56pm, at f8, 6 seconds per exposure, ISO 180. The interval was 8 seconds.
I brought my big tripod to get over the glass wall. The lens was set to 28mm.
John Harvey Photo > Blogs for 2025 to 2005 > January 2024 > Sunset From 733 Seymour

First Night
This was taken at 20mm. I started at 7:14:57 and took a photo every 8 seconds until 10:07:27pm (1296 images). The camera started at f8, 1/500th, ISO 100 and ended at f8, 5 seconds at ISO 3200.

Nara and I go out Kayaking and come back in this sequence.
John Harvey Photo > John's Overnight Page > Halfmoon Bay > First Night

Sunset With Layers Of Cloud
I started at 7:49:55pm and took a photo every 8 seconds until 9:50:59pm (909 images). I started at f8, 1/640, ISO 100 and ended at f8, 6 seconds, ISO 720. The lens was set at 24mm.
John Harvey Photo > John's Overnight Page > Halfmoon Bay > Sunset With Layers Of Cloud

Fireworks On Cloudy Night
This timelapse is from 948 images, starting at 8:49pm (f8, 1/200, ISO 100) and taking photos every 6 seconds until 10:28pm (f8, 5 seconds, ISO 100). I generally switch the mode from Aperture priority to manual mode near the start of the fireworks. The focal length on the lens was set to 40mm.
John Harvey Photo > Blogs for 2025 to 2005 > July 2023 > Fireworks On Cloudy Night

Fireworks On Clear Night
This timelapse started at 8:41pm (F8.0, 1/320, ISO 100) and photos were taken every 6 seconds until 10:35pm (f8, 4 seconds, ISO 100) for 1137 frames.
The lens was set to 34mm.
John Harvey Photo > Blogs for 2025 to 2005 > July 2023 > Fireworks On Clear Night

More Photo Results...