Bird
Raised Fist0
NumPydata~10 mins

Basic image manipulation with arrays in NumPy - Step-by-Step Execution

Choose your learning style10 modes available
Concept Flow - Basic image manipulation with arrays
Load image as array
↓
Access pixel values
↓
Modify pixel values
↓
Save or display modified image
We start by loading an image into an array, then access and change pixel values, and finally save or show the changed image.
Execution Sample
NumPy
import numpy as np
image = np.array([[100, 150], [200, 250]])
image[0, 1] = 255
print(image)
This code creates a small 2x2 image array, changes one pixel's brightness, and prints the updated array.
Execution Table
StepActionArray StatePixel ModifiedOutput
1Create 2x2 array[[100, 150], [200, 250]]None[[100 150] [200 250]]
2Change pixel at (0,1) to 255[[100, 255], [200, 250]](0,1)[[100 255] [200 250]]
3Print array[[100, 255], [200, 250]]None[[100 255] [200 250]]
💡 All steps completed, image array modified and printed.
Variable Tracker
VariableStartAfter Step 1After Step 2After Step 3
imageundefined[[100 150] [200 250]][[100 255] [200 250]][[100 255] [200 250]]
Key Moments - 2 Insights
Why does changing image[0, 1] affect the array?
Because image is a numpy array, and image[0, 1] accesses the pixel at row 0, column 1. Changing it updates the array directly, as shown in step 2 of the execution table.
Why do we see the updated array printed after modification?
The print statement in step 3 outputs the current state of the array, which includes the modified pixel from step 2.
Visual Quiz - 3 Questions
Test your understanding
Look at the execution table, what is the value of image[0,1] after step 2?
A100
B150
C255
D200
💡 Hint
Check the 'Array State' and 'Pixel Modified' columns in step 2.
At which step is the pixel value at (0,1) changed?
AStep 1
BStep 2
CStep 3
DNo change occurs
💡 Hint
Look at the 'Action' column describing pixel modification.
If we changed image[1,0] to 0 instead of image[0,1], what would be the value at image[1,0] after step 2?
A0
B200
C255
D250
💡 Hint
Think about which pixel is modified and check the 'Pixel Modified' column.
Concept Snapshot
Basic image manipulation with arrays:
- Load image as numpy array
- Access pixels by row and column indices
- Modify pixel values directly
- Print or save the updated array
- Changes affect the array immediately
Full Transcript
We start by loading an image as a numpy array. Each pixel is accessed by its row and column index. Changing a pixel value updates the array directly. Finally, printing the array shows the modified image data. This simple process allows basic image manipulation using arrays.

Practice

(1/5)
1. What does a 2D numpy array represent when used for a grayscale image?
easy
A. Pixel brightness values arranged in rows and columns
B. A list of image file names
C. The color channels of an image
D. The size of the image in bytes

Solution

  1. Step 1: Understand image representation

    A grayscale image is made of pixels arranged in rows and columns, each pixel having a brightness value.
  2. Step 2: Connect to numpy array structure

    A 2D numpy array stores these brightness values in a grid matching the image layout.
  3. Final Answer:

    Pixel brightness values arranged in rows and columns -> Option A
  4. Quick Check:

    Grayscale image = 2D pixel brightness array [OK]
Hint: Grayscale images use 2D arrays for pixel brightness [OK]
Common Mistakes:
  • Confusing pixel values with file names
  • Thinking 2D arrays store color channels
  • Mixing image size with pixel data
2. Which numpy code correctly flips a 2D image array img vertically?
easy
A. np.fliplr(img)
B. np.flip(img, axis=1)
C. np.flip(img, axis=0)
D. np.flip(img)

Solution

  1. Step 1: Understand vertical flip axis

    Vertical flip reverses rows, which corresponds to axis 0 in numpy arrays.
  2. Step 2: Match numpy functions to axis

    np.flip(img, axis=0) flips vertically.
  3. Final Answer:

    np.flip(img, axis=0) -> Option C
  4. Quick Check:

    Vertical flip = axis 0 flip [OK]
Hint: Vertical flip uses axis=0 in np.flip [OK]
Common Mistakes:
  • Using axis=1 flips horizontally
  • np.flip(img) without axis reverses all axes
  • Forgetting axis parameter in np.flip
3. Given this code:
import numpy as np
img = np.array([[10, 20], [30, 40]])
new_img = img + 5
print(new_img)

What is the output?
medium
A. [[10 20] [30 40]]
B. [[5 15] [25 35]]
C. [[50 60] [70 80]]
D. [[15 25] [35 45]]

Solution

  1. Step 1: Understand numpy array addition

    Adding 5 to a numpy array adds 5 to every element (broadcasting).
  2. Step 2: Calculate new array values

    Each element increases by 5: 10+5=15, 20+5=25, 30+5=35, 40+5=45.
  3. Final Answer:

    [[15 25] [35 45]] -> Option D
  4. Quick Check:

    Array + 5 adds 5 to all elements [OK]
Hint: Adding scalar adds to all pixels in array [OK]
Common Mistakes:
  • Thinking addition changes shape
  • Adding 5 only to first row or column
  • Confusing addition with multiplication
4. What is wrong with this code to crop the top-left 2x2 part of a 3x3 image array img?:
cropped = img[0:2, 0:3]
medium
A. It crops 2 rows but 3 columns, not 2 columns
B. It causes an index error
C. It flips the image instead of cropping
D. It returns the whole image

Solution

  1. Step 1: Analyze slicing indices

    The slice img[0:2, 0:3] selects rows 0 and 1 (2 rows) and columns 0,1,2 (3 columns).
  2. Step 2: Compare to desired crop size

    We want a 2x2 crop, but this selects 2x3, so it includes one extra column.
  3. Final Answer:

    It crops 2 rows but 3 columns, not 2 columns -> Option A
  4. Quick Check:

    Slicing columns 0:3 selects 3 columns [OK]
Hint: Check slice ranges match desired rows and columns [OK]
Common Mistakes:
  • Assuming slicing is exclusive of end index
  • Expecting error from out-of-range slice
  • Confusing rows and columns order
5. You have a color image as a 3D numpy array img with shape (100, 100, 3). How do you create a new image gray_img by averaging the color channels for each pixel?
hard
A. gray_img = img.sum(axis=0)
B. gray_img = img.mean(axis=2)
C. gray_img = img[:, :, 0]
D. gray_img = np.flip(img, axis=1)

Solution

  1. Step 1: Understand image shape and channels

    The shape (100, 100, 3) means 100x100 pixels with 3 color channels (RGB) along axis 2.
  2. Step 2: Average color channels per pixel

    Using img.mean(axis=2) calculates the average of the 3 channels for each pixel, producing a 2D grayscale image.
  3. Final Answer:

    gray_img = img.mean(axis=2) -> Option B
  4. Quick Check:

    Mean over axis 2 averages color channels [OK]
Hint: Use mean(axis=2) to average RGB channels [OK]
Common Mistakes:
  • Summing over wrong axis
  • Selecting only one color channel
  • Using flip instead of averaging
Recommended

Ready to prove it?

Pass the test and this pattern moves unknown strong while earning +1 Grip toward your certificate.

10 questions~5 mineasy hard