Home

Search John Harvey Photo for...
Advanced Search...
Photo Search Returned 1 to 20 of 76
Restrict search - underwater AND: fish 26 Hawaii 17 Vietnam 9 sea star 9 sea urchin 6 Mexico 5
New search - Related Tags: Hawaii 166 fish 155 Vietnam 131 sea star 55 Mexico 51 sea urchin 20

Rock Crab Walking Through
Rock Crab Walking Through
Species: Cancer productus (red rock crab)

John Harvey Photo > Blogs for 2025 to 2005 > May 2025 > Rock Crab Walking Through

Shiner Surfperch
Shiner Surfperch
Species: Cymatogaster aggregata (shiner perch)

John Harvey Photo > Blogs for 2025 to 2005 > May 2025 > Shiner Surfperch

Shiner Surfperch Close
Shiner Surfperch Close
Species: Cymatogaster aggregata (shiner perch)

John Harvey Photo > Blogs for 2025 to 2005 > May 2025 > Shiner Surfperch Close

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

Sea Lemon
Sea Lemon
Species: Peltodoris nobilis (Noble Dorid, sea lemon)

John Harvey Photo > John's Overnight Page > Haida Gwaii > Tanu > Sea Lemon

Dark Fish On Brain Coral
Dark Fish On a Plate Coral. I suspect this is from the Fungia genus, but I'm really guessing.
Species: Fungia fungites (Common Mushroom Coral)

John Harvey Photo > Trips out of the Country > Vietnam > Pho Quoc > Dark Fish On Brain Coral

Coral With Lots Of Arms
iNaturalist for the win! Common Mushroom Coral. There is a little bit of purple in the lower right corner.
Species: Fungia fungites (Common Mushroom Coral)

John Harvey Photo > Trips out of the Country > Vietnam > Pho Quoc > Coral With Lots Of Arms

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

Green Sea Eurchins
This is what happens when you turn the flash on.
Species: Strongylocentrotus droebachiensis (Green Sea Urchin)

John Harvey Photo > John's Overnight Page > Desolation Sound > Green Sea Eurchins

Egg Yolk Jellyfish
Photographing from a Kayak is much easier - just slow down and stick your hand in.
Species: Phacellophora camtschatica (Egg-yolk Jelly)

John Harvey Photo > John's Overnight Page > Haida Gwaii > Hot Spring Island > Egg Yolk Jellyfish

Bat Star Just Under Surface
Bat Star Just Under Surface
Species: Asterina miniata (Bat Star)

John Harvey Photo > John's Overnight Page > Haida Gwaii > Hot Spring Island > Bat Star Just Under Surface

Plumos And Urchins
Plumos And Urchins
John Harvey Photo > John's Overnight Page > Haida Gwaii > Tanu > Plumos And Urchins

Rainbow Star
Rainbow Star
Species: Orthasterias koehleri (Rainbow Star)

John Harvey Photo > John's Overnight Page > Haida Gwaii > Tanu > Rainbow Star

Orange Abalone
These were harvested until they were threatened in BC. They have come back well in this Haida Gwaii, but you still can't harvest them here. Even taking a washed up shell home is could get questions from DFO.
Species: Haliotis kamtschatkana (pinto abalone, Northern abalone, Japanese abalone)

John Harvey Photo > John's Overnight Page > Haida Gwaii > Tanu > Orange Abalone

Two Sea Cucumbers Mouths Meeting
Two Sea Cucumbers Mouths Meeting
John Harvey Photo > John's Overnight Page > Haida Gwaii > Tanu > Two Sea Cucumbers Mouths Meeting

Colourful Tube Worms
This photo was taken off the side of the water dock. The white Anenome in the middle are Plumos Aneome (not the Giant one). The tube worms (red and white colors) have a hard calcium tube they can retreat into.
Species: Metridium senile (Plumose Anemone), Serpula columbiana (Red Tubeworm, Calcareous Tube Worm)

John Harvey Photo > John's Overnight Page > Haida Gwaii > Tanu > Colourful Tube Worms

Dock Side Anemone And Mussels
Dock Side Anemone And Mussels
John Harvey Photo > John's Overnight Page > Haida Gwaii > Tanu > Dock Side Anemone And Mussels

Barnacles
Barnacles
John Harvey Photo > John's Overnight Page > Haida Gwaii > Tanu > Barnacles

More Photo Results...