অনেক লোকের জন্য, ইমেজ প্রসেসিং একটি ভীতিকর এবং দুঃসাধ্য কাজ বলে মনে হতে পারে তবে এটি ততটা কঠিন নয় যতটা মানুষ ভেবেছিল। এই টিউটোরিয়ালে আমরা পাইথন দিয়ে openCv-তে মৌলিক রঙ সনাক্তকরণ করব।
একটি কম্পিউটারে রঙ কিভাবে কাজ করে?
আমরা রং-স্পেস বা রঙের মডেল দ্বারা কম্পিউটারে রঙগুলিকে উপস্থাপন করি যা মূলত রঙের পরিসরকে সংখ্যার টিপল হিসাবে বর্ণনা করে।
প্রতিটি রঙের জন্য যাওয়ার পরিবর্তে, আমরা সবচেয়ে সাধারণ রঙ-স্থান নিয়ে আলোচনা করব যা আমরা .i.e. RGB(লাল, সবুজ, নীল) এবং HSV (হিউ, স্যাচুরেশন, ভ্যালু)।
আরজিবি মূলত তিনটি উপাদানের একটি টিপল হিসাবে রঙকে বর্ণনা করে। প্রতিটি উপাদান 0 এবং 255 এর মধ্যে একটি মান নিতে পারে, যেখানে টিপল (0, 0, 0) কালো এবং (255, 255, 255) সাদা প্রতিনিধিত্ব করে। উদাহরণস্বরূপ, যদি আমরা পর্দায় একটি বিশুদ্ধ নীল পিক্সেল দেখাই, তাহলে R মান হবে 0, G মান হবে 0 এবং B মান হবে 255৷
নীচে RGB-তে রঙের আরও কয়েকটি উদাহরণ দেওয়া হল:
রঙ | RGB মান |
---|---|
লাল | 255, 0, 0 |
কমলা | 255, 128, 0 |
গোলাপী | 255, 153, 255 |
HSV-এর সাথে, একটি পিক্সেলকে 3টি পরামিতি দ্বারাও প্রতিনিধিত্ব করা হয়, কিন্তু এর পরিবর্তে এটি Hue, Saturation এবং Value। যাইহোক, RGB এর বিপরীতে, HSV একটি পিক্সেল উপস্থাপন করতে প্রাথমিক রঙ ব্যবহার করে না। পরিবর্তে, এটি রঙ ব্যবহার করে, যা পিক্সেলের রঙ বা ছায়া।
স্যাচুরেশন হল রঙের তীব্রতা, যেখানে 0 এর স্যাচুরেশন 0 এবং 255 এর স্যাচুরেশন হল সর্বোচ্চ তীব্রতা। মানই বলে দেবে রঙটি কতটা উজ্জ্বল বা গাঢ়।
সঠিক রঙ সনাক্ত করা হচ্ছে
তাহলে আসুন প্রথমে ছবিটি ডাউনলোড করি যার সাথে আমরা কাজ করব,
এখন যেহেতু আমরা রঙের চিত্র পেয়েছি, আমরা মজার অংশ শুরু করতে পারি। শুধু আপনার প্রিয় পাইথন টেক্সট এডিটর বা IDE খুলুন এবং শুরু করা যাক।
cv2import numpy npimport imutilsimg =cv2.imread('color2.jpg') হিসাবে আমদানি করুন
কোডের উপরের লাইনে, প্রথম দুটি লাইন সমস্ত আমদানি পরিচালনা করে। তৃতীয় লাইনে, আমি imutils মডিউল আমদানি করছি, যা চিত্রের আকার পরিবর্তন করতে এবং রঙের পরিসর খুঁজে পেতে সহায়তা করে। 4 লাইনে আমরা ছবিটি খুলেছি।
hsv =cv2.cvtColor(img, cv2.COLOR_BGR2HSV)
এখন আমরা ছবিটিকে একটি hsv ছবিতে রূপান্তর করেছি কারণ hsv রঙ থেকে তীব্রতা আলাদা করতে সাহায্য করে।
lower_range =np.array([110,50,50])upper_range =np.array([130,255,255])
এখন আমরা নীলের উপরের এবং নিম্ন সীমা সংজ্ঞায়িত করি যা আমরা সনাক্ত করতে চাই। এই সীমা খুঁজে পেতে আমরা imutils লাইব্রেরিতে রেঞ্জ-ডিটেক্টর স্ক্রিপ্ট ব্যবহার করতে পারি। আমরা এই মানগুলিকে একটি NumPy অ্যারেতে রাখি৷
মাস্ক =cv2.inRange(hsv, Lower_range, upper_range)
এখানে আমরা আসলে নির্দিষ্ট নীল দিয়ে একটি মাস্ক তৈরি করছি। মুখোশটি কেবল চিত্রের একটি নির্দিষ্ট অংশকে উপস্থাপন করে। এই ক্ষেত্রে, আমরা hsv চিত্রের মাধ্যমে পরীক্ষা করছি, এবং নিম্ন-পরিসর এবং উচ্চ-পরিসরের মধ্যে রঙগুলি পরীক্ষা করছি। যে ক্ষেত্রগুলি মেলে সেগুলি একটি চিত্রকে মাস্ক ভেরিয়েবলে সেট করবে৷
৷cv2.imshow('image', img)cv2.imshow('mask', mask)while(True):k =cv2.waitKey(5) এবং 0xFF যদি k ==27:breakcv2.destroyAllWindows()প্রে>অবশেষে, পার্থক্য দেখতে আমরা আসল এবং মাস্ক ইমেজ পাশাপাশি দেখাতে পারি। আপনি যদি বুঝতে চান যে কোডটিতে 0xFF এর অর্থ কী তা পড়ুন। কোডটি তারপর ব্যবহারকারীর 'Esc' বোতামে আঘাত করার জন্য অপেক্ষা করে যা এটি থেকে প্রস্থান করবে এবং পরিষ্কার করার জন্য সমস্ত উইন্ডো ধ্বংস করবে৷
চূড়ান্ত প্রোগ্রাম
cv2import numpy npimport imutilsimg =cv2.imread('color2.jpg')hsv =cv2.cvtColor(img, cv2.COLOR_BGR2HSV)lower_range =np.array([110,50,_50) আপ পরিসীমা হিসাবে array([130,255,255])mask =cv2.inRange(hsv, Lower_range, upper_range)cv2.imshow('image', img)cv2.imshow('মাস্ক', মাস্ক)যখন(সত্য):k =cv2.waitKey(5) ) &0xFF যদি k ==27:breakcv2.destroyAllWindows()আউটপুট
উপরে, আমরা দেখছি মুখোশের মধ্যে কালো দাগের জোড়া রয়েছে, সেটা হল আওয়াজ।