অধ্যায়Phase 1 · ফাউন্ডেশন
1.7 10 মিনিট পড়া

ছবি পড়া ও দেখানো

imread, imshow, imwrite — basics।

🎬 গল্প দিয়ে শুরু
প্রতিটি Computer Vision pipeline-এর প্রথম তিনটি কাজ — ছবি পড়া, দেখানো, এবং সংরক্ষণ। শুনতে সহজ, কিন্তু এর মধ্যেই লুকিয়ে আছে BGR vs RGB, color flag, file format-এর গল্প। চলুন master করি।

ছবি পড়া — cv2.imread

python
read.py
import cv2

# Default — color (BGR), 3 channel
color = cv2.imread("dhaka.jpg")

# Grayscale (1 channel)
gray = cv2.imread("dhaka.jpg", cv2.IMREAD_GRAYSCALE)

# Unchanged — PNG-র alpha সহ
rgba = cv2.imread("logo.png", cv2.IMREAD_UNCHANGED)

print(color.shape if color is not None else "FAILED")
print(gray.shape, rgba.shape)
লাইন-বাই-লাইন ব্যাখ্যা
cv2.imread(path)
ফাইল না পেলে error দেয় না — None return করে। সবসময় check করুন।
IMREAD_GRAYSCALE
Loading-এর সময়ই grayscale-এ রূপান্তর — RAM বাঁচে।
IMREAD_UNCHANGED
Alpha (transparency) channel রাখার একমাত্র উপায়।
None-check ভুলবেন না
imread-এর সবচেয়ে common bug — wrong path দিলে কোনো warning নেই, পরের লাইনে গিয়ে crash করে। তাই সবসময়:
python
img = cv2.imread(path)
if img is None:
    raise FileNotFoundError(path)

ছবি দেখানো — cv2.imshow

python
show.py (desktop / script)
import cv2

img = cv2.imread("dhaka.jpg")
cv2.imshow("My Image", img)
cv2.waitKey(0)            # যেকোনো key চাপুন
cv2.destroyAllWindows()
waitKey(0) মানে কী?
waitKey(ms) = key press-এর জন্য কত মিলিসেকেন্ড অপেক্ষা। 0 = অনির্দিষ্ট। Video loop-এ ব্যবহার করুন waitKey(1) — প্রতি frame-এ ১ ms।

Jupyter / Colab-এ দেখানো

python
import cv2, matplotlib.pyplot as plt

img = cv2.imread("dhaka.jpg")
plt.figure(figsize=(8, 6))
plt.imshow(cv2.cvtColor(img, cv2.COLOR_BGR2RGB))  # BGR → RGB
plt.axis("off"); plt.show()

cvtColor(img, COLOR_BGR2RGB) না দিলে matplotlib-এ রং উল্টে (নীল-লাল swap) দেখা যাবে — এটি একদম classic OpenCV mistake।

ছবি save — cv2.imwrite

python
write.py
import cv2

img = cv2.imread("dhaka.jpg")

# Format ফাইল extension থেকেই infer হয়
cv2.imwrite("out.jpg", img)
cv2.imwrite("out.png", img)

# Compression quality control
cv2.imwrite("hq.jpg", img, [cv2.IMWRITE_JPEG_QUALITY, 95])  # 0-100
cv2.imwrite("small.png", img, [cv2.IMWRITE_PNG_COMPRESSION, 9])  # 0-9
FormatCompressionBest for
JPGLossyPhoto, web, ছোট size দরকার
PNGLosslessLogo, screenshot, alpha
BMPNoneRaw, debugging
WEBPLossy/LosslessModern web, ছোট ও পরিষ্কার
TIFFLosslessMedical, satellite, multi-page

End-to-end mini pipeline

python
pipeline.py — পড়া → প্রসেস → দেখানো → save
import cv2, os

INPUT = "dhaka.jpg"
OUTPUT_DIR = "outputs"
os.makedirs(OUTPUT_DIR, exist_ok=True)

img = cv2.imread(INPUT)
if img is None:
    raise FileNotFoundError(INPUT)

# ১. resize
img = cv2.resize(img, (800, 600))

# ২. grayscale version
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)

# ৩. দেখানো (desktop)
cv2.imshow("Color", img)
cv2.imshow("Gray",  gray)
cv2.waitKey(0)
cv2.destroyAllWindows()

# ৪. save
cv2.imwrite(f"{OUTPUT_DIR}/resized.jpg", img,
            [cv2.IMWRITE_JPEG_QUALITY, 90])
cv2.imwrite(f"{OUTPUT_DIR}/gray.png", gray)
print("Done!")
অভিনন্দন!
এটি আপনার প্রথম পূর্ণাঙ্গ OpenCV pipeline। পড়া → রূপান্তর → দেখানো → save — এই pattern পরের ৬০+ অধ্যায় জুড়ে আমরা বারবার ব্যবহার করব।
প্র্যাকটিস টাস্ক
  1. একটি folder-এর সব ছবি পড়ে grayscale করে আলাদা folder-এ save করুন (Python loop)।
  2. একটি ছবি JPEG quality 10, 50, 95-এ save করে তিনটির file size ও visual পার্থক্য দেখুন।
  3. একটি PNG icon load করে শুধু alpha channel আলাদা grayscale image হিসেবে save করুন।

Phase 1 শেষ — কী শিখলেন?

  • Computer Vision-এর সংজ্ঞা, ইতিহাস ও real-world ব্যবহার।
  • মানুষ ও মেশিন দৃষ্টির পার্থক্য — কোথায় কোনটি জেতে।
  • ছবি আসলে একটি matrix; pixel, channel, resolution, bit depth।
  • NumPy দিয়ে slicing, broadcasting, masking — image-এর গাণিতিক ভিত্তি।
  • OpenCV setup, environment ও project structure।
  • imread, imshow, imwrite — প্রতিটি pipeline-এর তিনটি স্তম্ভ।
পরবর্তী যাত্রা — Phase 2
এখন আপনি ছবি পড়তে-লিখতে পারেন। Phase 2-এ আমরা ছবিকে রূপান্তর করতে শিখব — resize, color space, filter, edge, threshold, morphology, histogram। এখান থেকেই শুরু হবে আসল Image Processing-এর জাদু।