ছবি একটি ম্যাট্রিক্স হিসেবে
Pixel, intensity, এবং matrix representation।
Pixel — ছবির ক্ষুদ্রতম একক
Pixel মানে “picture element” — ছবির সবচেয়ে ছোট unit। প্রতিটি pixel আলোর intensity ধারণ করে। একটি grayscale ছবিতে প্রতিটি pixel-এ থাকে ০–২৫৫ এর মধ্যে একটি সংখ্যা — ০ মানে কালো, ২৫৫ মানে সাদা, মাঝখানের সব সংখ্যা ধূসরের বিভিন্ন shade।
Grayscale ছবি = 2D Matrix
একটি grayscale ছবি যদি ৫×৫ resolution-এর হয়, সেটি দেখতে এমন:
[[ 0 20 40 60 80]
[ 30 60 90 120 150]
[ 60 100 140 180 220]
[ 90 140 190 240 255]
[120 180 230 255 255]]এটি একটি সাধারণ ২-মাত্রিক matrix — shape = (5, 5)। প্রথম মাত্রা rows (উচ্চতা/height), দ্বিতীয় মাত্রা columns (প্রস্থ/width)। উপরের-বাম কোণ হলো (0, 0)।
image[y, x] অর্থাৎ আগে row (y), পরে column (x)।Color ছবি = 3D Matrix
একটি color (RGB) ছবি আসলে তিনটি grayscale matrix একসাথে — একটি Red-এর জন্য, একটি Green-এর জন্য, একটি Blue-এর জন্য। এদের “channel” বলা হয়।
import cv2
gray = cv2.imread("dhaka.jpg", cv2.IMREAD_GRAYSCALE)
color = cv2.imread("dhaka.jpg") # BGR by default in OpenCV
print("Grayscale shape:", gray.shape) # (H, W)
print("Color shape: ", color.shape) # (H, W, 3)
print("Total pixels: ", gray.size)
print("Data type: ", gray.dtype)cv2.IMREAD_GRAYSCALEcolor.shape == (H, W, 3)gray.sizegray.dtypecv2.cvtColor(img, cv2.COLOR_BGR2RGB).হাতে-কলমে — নিজেই একটি ছবি বানান
import numpy as np
import cv2
# 100x100 black image
img = np.zeros((100, 100), dtype=np.uint8)
# Make the middle 40x40 square white
img[30:70, 30:70] = 255
# Make a gradient row
img[0, :] = np.linspace(0, 255, 100).astype(np.uint8)
cv2.imwrite("hand_made.png", img)
print("Saved! Shape:", img.shape)কোনো camera ছাড়াই আপনি একটি ছবি তৈরি করলেন — শুধু সংখ্যা দিয়ে। এটিই প্রমাণ করে: ছবি = matrix।
Memory হিসাব — একটি ছবি কত বড়?
একটি 1920×1080 RGB ছবির raw size:
1920 × 1080 × 3 channels × 1 byte = 6,220,800 bytes ≈ 5.93 MBJPEG/PNG compression এই size ছোট করে আনে, কিন্তু RAM-এ ছবি লোড হওয়ার পর এই full size জায়গা দখল করে। Video processing-এ এটি জানা critical।
- একটি 200×200 grayscale ছবি বানান যেখানে বাম-উপর থেকে ডান-নিচ পর্যন্ত diagonal gradient থাকবে।
- OpenCV দিয়ে একটি color ছবি পড়ে শুধু Red channel-কে আলাদা করে save করুন।
- একটি 4K (3840×2160) RGB ভিডিওর ৩০ সেকেন্ড raw form-এ কত GB হবে — হিসাব করে দেখুন।
সারসংক্ষেপ
- Pixel = ছবির ক্ষুদ্রতম unit, intensity ০–২৫৫।
- Grayscale = 2D matrix (H, W)। Color = 3D matrix (H, W, 3)।
- OpenCV channel order = BGR, index order = [y, x]।
- ছবি আসলে শুধু সংখ্যা — তাই NumPy দিয়ে যেকোনো image operation সম্ভব।