কম্পিউটার টিউটোরিয়াল

পাইথন OpenCV-এ জ্যামিতিক আকৃতি আঁকা


ভূমিকা

OpenCV-এর মূল কাজগুলোর মধ্যে একটি হলো ছবির ওপর বিভিন্ন জ্যামিতিক আকৃতি আঁকা। রেখা, বৃত্ত, আয়ত, উপবৃত্ত, বহুভুজ এবং লেখা লেখা—এই সব কাজ করা যায় সহজে। ছবি বিশ্লেষণে কোনো নির্দিষ্ট অঞ্চল হাইলাইট করতে (যেমন আয়ত আঁকা) বা নির্দেশ করাতে (যেমন বাঁক) এগুলো খুব কাজে আসে।

প্রধান ফাংশনগুলো

  • cv2.line() — রেখা আঁকতে
  • cv2.rectangle() — আয়ত আঁকতে
  • cv2.circle() — বৃত্ত আঁকতে
  • cv2.ellipse() — উপবৃত্ত আঁকতে
  • cv2.polylines() — বহুভুজ আঁকতে
  • cv2.putText() — লেখা লেখতে

গুরুত্বপূর্ণ: OpenCV-এ রঙ BGR ফরম্যাটে ব্যবহার করা হয় (RGB নয়)।

উদাহরণ: কালো ক্যানভাস তৈরি

import numpy as np
import cv2

# 350x350 পিক্সেল, 3 চ্যানেল (BGR), কালো পটভূমি
my_img = np.zeros((350, 350, 3), dtype="uint8")
cv2.imshow('Window', my_img)
cv2.waitKey(0)
cv2.destroyAllWindows()

রেখা আঁকা (cv2.line)

প্যারামিটার: ছবি, শুরু বিন্দু (x,y), শেষ বিন্দু (x,y), রঙ (BGR), মোটা (পিক্সেল)

import numpy as np
import cv2

my_img = np.zeros((350, 350, 3), dtype="uint8")
# (202,220) থেকে (100,160) পর্যন্ত নীলিমা রঙের রেখা, মোটা ১০
cv2.line(my_img, (202, 220), (100, 160), (0, 20, 200), 10)
cv2.imshow('Window', my_img)
cv2.waitKey(0)
cv2.destroyAllWindows()

আয়ত আঁকা (cv2.rectangle)

প্যারামিটার: ছবি, উপরের বাম কোণা (x,y), নিচের ডান কোণা (x,y), রঙ (BGR), মোটা (পিক্সেল)

import numpy as np
import cv2

my_img = np.zeros((400, 400, 3), dtype="uint8")
# (30,30) থেকে (300,200) পর্যন্ত আয়ত
cv2.rectangle(my_img, (30, 30), (300, 200), (0, 20, 200), 10)
cv2.imshow('Window', my_img)
cv2.waitKey(0)
cv2.destroyAllWindows()

বৃত্ত আঁকা (cv2.circle)

প্যারামিটার: ছবি, কেন্দ্র (x,y), ব্যাসার্ধ, রঙ (BGR), মোটা (পিক্সেল)

import numpy as np
import cv2

my_img = np.zeros((400, 400, 3), dtype="uint8")
# কেন্দ্র (200,200), ব্যাসার্ধ ৮০, মোটা ১০
cv2.circle(my_img, (200, 200), 80, (0, 20, 200), 10)
cv2.imshow('Window', my_img)
cv2.waitKey(0)
cv2.destroyAllWindows()

উপবৃত্ত আঁকা (cv2.ellipse)

প্যারামিটার: ছবি, কেন্দ্র (x,y), অক্ষ দৈর্ঘ্য (major, minor), ঘূর্ণন কোণ, শুরু কোণ, শেষ কোণ, রঙ, মোটা

import numpy as np
import cv2

my_img = np.zeros((400, 400, 3), dtype="uint8")
# কেন্দ্র (256,256), অক্ষ (100,50), ০ ডিগ্রি ঘূর্ণন, ০ থেকে ১৮০ ডিগ্রি, সাদা রঙ, ভরা (-1)
cv2.ellipse(my_img, (256, 256), (100, 50), 0, 0, 180, (255, 255, 255), -1)
cv2.imshow('Window', my_img)
cv2.waitKey(0)
cv2.destroyAllWindows()

বহুভুজ আঁকা (cv2.polylines)

প্যারামিটার: ছবি, বিন্দুগুলোয় অ্যারে, বন্ধ কিনা (True/False), রঙ, মোটা

import numpy as np
import cv2

my_img = np.zeros((400, 400, 3), dtype="uint8")
pts = np.array([[10,5], [20,30], [70,20], [50,10]], np.int32)
pts = pts.reshape((-1, 1, 2))  # OpenCV-এর প্রয়োজনীয় আকার
cv2.polylines(my_img, [pts], True, (0, 255, 255), 3)
cv2.imshow('Window', my_img)
cv2.waitKey(0)
cv2.destroyAllWindows()

লেখা লেখা (cv2.putText)

প্যারামিটার: ছবি, টেক্সট, শুরু বিন্দু (x,y), ফন্ট, আকার, রঙ, মোটা, লাইন টাইপ

import numpy as np
import cv2

my_img = np.zeros((400, 400, 3), dtype="uint8")
font = cv2.FONT_HERSHEY_SIMPLEX
cv2.putText(my_img, 'Tutorials Point', (50, 50), font, 0.8, (255, 0, 0), 2, cv2.LINE_AA)
cv2.imshow('Window', my_img)
cv2.waitKey(0)
cv2.destroyAllWindows()

সারসংক্ষেপ

OpenCV-এ জ্যামিতিক আকৃতি আঁকা অনেক সহজ। প্রতিটি ফাংশনের প্যারামিটার সঠিকভাবে বুঝলে যেকোনো জটিল ডিজাইন তৈরি করা যায়। বআরই মনে রাখবেন: রঙ সবসময় BGR ফরম্যাটে দিতে হবে।

  1. পাইথনে OpenCV ব্যবহার করে ইমেজ অ্যাডিশন ও ব্লেন্ডিং

  2. পাইথন OpenCV মডিউল ব্যবহার করে হিস্টোগ্রাম ইকুয়ালাইজেশন

  3. পাইথন OpenCV-এ ভিডিও উল্টো চালানো (Reverse Playback)

  4. পাইথনে OpenCV ব্যবহার করে ইমেজ ইরোশন এবং ডাইলেশন