Color transforms help change how an image looks by adjusting brightness, contrast, or hue. This makes images clearer or more interesting for computers to understand.
Color transforms (brightness, contrast, hue) in Computer Vision
brightness_image = original_image * brightness_factor contrast_image = (original_image - mean) * contrast_factor + mean hue_image = adjust_hue(original_image, hue_factor)
Brightness factor > 1 makes the image brighter; between 0 and 1 makes it darker.
Contrast adjustment usually centers around the mean pixel value.
brightness_image = original_image * 1.2contrast_image = (original_image - 128) * 1.5 + 128
hue_image = adjust_hue(original_image, 0.1)This code creates a small 2x2 color image and applies brightness, contrast, and hue changes. It prints the original and transformed images as arrays.
import cv2 import numpy as np def adjust_brightness(image, factor): return np.clip(image * factor, 0, 255).astype(np.uint8) def adjust_contrast(image, factor): mean = np.mean(image, axis=(0,1), keepdims=True) return np.clip((image - mean) * factor + mean, 0, 255).astype(np.uint8) def adjust_hue(image, factor): hsv = cv2.cvtColor(image, cv2.COLOR_BGR2HSV).astype(np.float32) hsv[..., 0] = (hsv[..., 0] + factor * 180) % 180 hsv = hsv.astype(np.uint8) return cv2.cvtColor(hsv, cv2.COLOR_HSV2BGR) # Load sample image image = np.full((2, 2, 3), [100, 150, 200], dtype=np.uint8) # simple 2x2 image with color bright = adjust_brightness(image, 1.5) contrast = adjust_contrast(image, 1.5) hue = adjust_hue(image, 0.1) print("Original image:\n", image) print("\nBrightened image:\n", bright) print("\nContrast adjusted image:\n", contrast) print("\nHue adjusted image:\n", hue)
Brightness and contrast changes can cause pixel values to go outside 0-255, so clipping is important.
Hue adjustment works best in HSV color space, which separates color from brightness.
Small images are used here for simplicity; real images are larger but use the same methods.
Brightness changes make images lighter or darker by scaling pixel values.
Contrast changes stretch or shrink differences between pixel values around their average.
Hue changes shift colors by rotating the color wheel in HSV space.
Practice
Solution
Step 1: Understand brightness effect on pixels
Brightness changes add or multiply pixel values to make them lighter or darker.Step 2: Identify what increasing brightness means
Increasing brightness means making pixel values larger, so the image looks lighter.Final Answer:
It makes pixel values larger, making the image lighter -> Option AQuick Check:
Brightness increase = lighter pixels [OK]
- Confusing brightness with contrast
- Thinking brightness rotates colors
- Assuming brightness converts to grayscale
Solution
Step 1: Recall contrast adjustment formula
Contrast changes stretch pixel values around the midpoint (usually 128 for 8-bit images).Step 2: Identify correct formula
The formula (old_pixel - 128) * factor + 128 increases contrast by scaling differences from midpoint.Final Answer:
new_pixel = (old_pixel - 128) * 1.5 + 128 -> Option AQuick Check:
Contrast = scale around midpoint [OK]
- Adding a constant increases brightness, not contrast
- Dividing pixel values reduces brightness
- Multiplying by zero makes image black
img?
import cv2
import numpy as np
img = cv2.imread('image.jpg')
hsv = cv2.cvtColor(img, cv2.COLOR_BGR2HSV)
hsv[:, :, 0] = (hsv[:, :, 0] + 30) % 180
img_shifted = cv2.cvtColor(hsv, cv2.COLOR_HSV2BGR)Solution
Step 1: Understand HSV color space and hue channel
HSV separates color into Hue, Saturation, and Value. Hue channel controls color angle on the wheel.Step 2: Analyze code effect on hue channel
The code adds 30 to the hue channel and wraps around with modulo 180, shifting colors on the wheel.Final Answer:
The image hue is shifted by 30 degrees on the color wheel -> Option DQuick Check:
Hue shift = color rotation [OK]
- Confusing hue shift with brightness or contrast
- Ignoring modulo wrap-around for hue
- Assuming color space conversion changes brightness
def increase_contrast(img):
mean = img.mean()
return (img - mean) * 1.2 + mean
result = increase_contrast(image)Solution
Step 1: Understand contrast adjustment per channel
Contrast should be adjusted per color channel to preserve color balance.Step 2: Identify error in mean calculation
The code calculates mean over entire image, mixing channels, causing wrong contrast scaling.Final Answer:
The mean should be computed per channel, not overall -> Option CQuick Check:
Contrast per channel = correct scaling [OK]
- Using single mean for all channels
- Using factor less than 1 reduces contrast
- Adding constant changes brightness, not contrast
Solution
Step 1: Consider effect of brightness before contrast
Increasing brightness first ensures pixel values are lifted before stretching differences with contrast.Step 2: Apply hue shift last to avoid color distortion
Hue shift should be last to rotate colors after brightness and contrast adjustments.Step 3: Confirm order preserves natural colors
Brightness -> Contrast -> Hue maintains natural look by adjusting lightness and contrast before color rotation.Final Answer:
Increase brightness -> Increase contrast -> Shift hue -> Option BQuick Check:
Brightness then contrast then hue = natural colors [OK]
- Shifting hue before brightness causes unnatural colors
- Increasing contrast before brightness can clip pixels
- Applying hue shift first distorts brightness and contrast
Ready to prove it?
Pass the test and this pattern moves unknown
