Advanced Search...
|
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
|