ভূমিকা
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 ফরম্যাটে দিতে হবে।