Home

Search John Harvey Photo for...
Contains Text:
Include Photo Descriptions
Include Story Pages
Include Comments
Include Scientific Names
Camera equals
Lens equals
Date is greater than or equal (Year/Month/Day)
Date is less than or equal (Year/Month/Day)
Film equals
Photographer equals
Photo Subject equals
Tag equals
PhotoOfTheDay is greater than or equal (Year/Month/Day)
PhotoOfTheDay is less than or equal (Year/Month/Day)
Gender equals
Plumage equals
Age equals
Region equals
Panoramas | Images Most Recently Modified | Images with comments | Photos over time of | Species | Parks | Videos
Search Returned...
Words 3 character or shorter are ignored. Very common words (they, them, ...) are also ignored.

Ogden Snails
Tuesday, May 13th, 2025 at 21:02:42
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 > Ogden Snails

Ogden Point Urchins
Tuesday, May 13th, 2025 at 21:02:42
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 > Ogden Point Urchins

Last Of Cherry Blossums
Tuesday, May 13th, 2025 at 21:02:38
Last Of Cherry Blossums

John Harvey Photo > Last Of Cherry Blossums

Northern Saw Whet Owl
Saturday, April 5th, 2025 at 23:43:32
Northern Saw Whet Owl
Species: Aegolius acadicus (Northern Saw-whet Owl)

John Harvey Photo > Blogs for 2025 to 2005 > March 2025 > Northern Saw Whet Owl

Chinatown Parade 2025
Sunday, February 9th, 2025 at 21:39:16
Chinatown Parade 2025

Neon In The Rain
Saturday, January 25th, 2025 at 20:00:11
Neon In The Rain
John Harvey Photo > Trips out of the Country > Hong Kong 15 > Neon In The Rain

Snowy Owl
Sunday, January 19th, 2025 at 18:45:20
Snowy Owl
Species: Bubo scandiacus (Snowy Owl)

John Harvey Photo > Blogs for 2025 to 2005 > December 2024 > Snowy Owl

Puffins
Sunday, October 6th, 2024 at 18:24:38
Puffins

John Harvey Photo > John's Overnight Page > Oregon Coast Road Trip > North Oregon Coast > Puffins

Newport Sealions
Tuesday, October 1st, 2024 at 00:05:31
Newport Sealions
Species: Zalophus californianus (California sea lion)

John Harvey Photo > John's Overnight Page > Oregon Coast Road Trip > Mid Oregon Coast > Newport Sealions

Pigeon Guillemot
Tuesday, October 1st, 2024 at 00:05:31
Pigeon Guillemot

John Harvey Photo > John's Overnight Page > Oregon Coast Road Trip > Mid Oregon Coast > Pigeon Guillemot

Whitewater In Washing Machine
Wednesday, September 18th, 2024 at 22:31:26
Whitewater In Washing Machine

John Harvey Photo > John's Overnight Page > Oregon Coast Road Trip > Portland > Whitewater In Washing Machine

Malaysia Fireworks
Monday, July 29th, 2024 at 23:00:06
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
Monday, July 29th, 2024 at 23:00:05
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
Wednesday, April 24th, 2024 at 21:00:53
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
Saturday, April 20th, 2024 at 22:49:17
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
Saturday, March 16th, 2024 at 13:50:12
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
Sunday, January 28th, 2024 at 21:45:14
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
Sunday, January 28th, 2024 at 21:45:14
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

Skookumchuck Narrows Flow
Sunday, January 28th, 2024 at 21:45:14
This was shot in the camera and stabilized in post (Final Cut Pro).

John Harvey Photo > John's Overnight Page > Halfmoon Bay > Skookumchuck Narrows Flow

Fireworks On Clear Night
Friday, October 13th, 2023 at 22:11:05
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...