در بخش قبلی آموزش پردازش تصویر با نرم افزار OpenCV به خواندن و ذخیره تصویر پرداختیم. در این بخش و سومین قسمت از آموزش به رسم اشکال مختلف در نرم افزار OpenCV میپردازیم. لازم به ذکر است که یکی از بخشهای مهم در پردازش تصویر، رسم شکلهای مختلف میباشد. به عنوان مثال میخواهید تصویر یک فرد یا یک شی را در تصویر جهت اعمال پردازش تصویر مشخص کنید. و یا اسم شخص را بنویسید و… اینکار با رسم شکل توسط توابع ترسیم نرم افزار OpenCV صورت میپذیرد. در این آموزش یاد خواهیم گرفت که اشکال مختلف را در OpenCV نمایش دهیم. در ادامه آموزش پردازش تصویر OpenCV رزبری پای با دیجی اسپارک، مرجع تخصصی رزبری پای به زبان فارسی همراه باشید.
۱- توابع ترسیم نرم افزار OpenCV
توابعی که با آنها کار میکنیم عبارتند از : cv2.line(), cv2.circle() , cv2.rectangle(), cv2.ellipse(), cv2.putText() فعالیتی که هرکدام از این توابع انجام میدهند، از اسمشان پیداست. آرگومانهای مشترک مورد استفاده در توابع ترسیم نرم افزار OpenCV عبارتند از:
- img : تصویری که در آن می خواهیم اشکال را رسم کنید.
- color : رنگ شکل. برای BGR، آن را به عنوان یک تابع وارد کنید، به این صورت که مقادیری از ۰ تا ۲۵۵ را به ترتیب برای رنگ های آبی، سبز و قرمز وارد میکنید تا ترکیبی از این رنگ ها بسازید ، به عنوان مثال:
(۲۵۵,۰,۰)
رنگ آبی خواهد بود و برای سیاه و سفید فقط مقدار اسکالر را وارد کنید. - thickness : ضخامت خط یا دایره و غیره اگر -۱ برای اشکال بسته مانند دایره وارد شود، شکل را پر می کند. (ضخامت پیش فرض =۱)
- lineType : نوع خط، عبارتند از خطوط ۸-connected, anti-aliased و غیره (به طور پیش فرض ۸-connected است). مشخصه
cv2.CV_AA
خطوط بدون پِلگی ارائه می دهد که برای منحنی ها مناسب است.
به مثال زیر در نرم افزار پردازش تصویر OpenCV توجه کنید، با اجرای این مثال درک بهتری نسبت به توابع ترسیم نرم افزار OpenCV پیدا خواهید کرد.
محدودیت در دسترسی کامل به این مجموعه آموزش
دسترسی کامل به آموزش برای اعضای دیجی اسپارک امکان پذیر است. بخش اصلی آموزش شامل سورس کدهای توسعه داده شده توسط مهندسهای دیجی اسپارک است. به همین دلیل این آموزش خاص و یکتاست. برای استفاده از آن بایستی عضویت تهیه کنید. تبادل نظر با کاربران و پرسش سوال رایگان است و میتوانید از بخش نظرات همین آموزش اقدام کنید. |
در این مثال ابتدا با استفاده از numpy یک صفحه سیاه تولید میکنیم. سپس اشکال مورد نظر را رسم میکنیم. numpy کتابخانه ایست برای کار با اعداد از راه ماتریسها و آرایههای چندبعدی طراحی شده است. در اینجا تصاویر را با استفاده از این آرایهها میسازیم. همانطور که میبینید با تابع np.zeros()
امکان تولید تصاویر سیاه وجود دارد. همچنین با تابع np.ones()
میتوان تصاویر سفید تولید کرد. آرگومانهای مورد استفاده در اینجا سایز و نوع داده آرایه است. ما در این بخش یک آرایه ۵۱۲ در ۵۱۲ در ۳ تولید کردهایم که دو عدد اول سایز تصویر ماست و عدد بعدی برای تنظیم رنگ تصویر میباشد. نوع داده آرایه np.uint8 تنظیم شده است. نکته: تمامی مختصاتها به این صورت است که ابتدا فاصله تا سمت چپ تصویر و سپس فاصله تا بالای تصویر داده میشود.
۲- انواع تابع رسم شکل در OpenCV
تابع رسم خط در OpenCV
برای رسم خط به مختصات ابتدایی و انتهایی آن نیازمندیم.
cv2.line(img,(0,0),(511,511),(255,0,0),5)
میبینیم که در نرم افزار OpenCV یک خط آبی مورب از گوشه بالا سمت چپ به گوشه پایین سمت راست رسم کردیم. این خط دارای ضخامت ۵ پیکسل میباشد. آرگومانهای مورد استفاده در cv2.line به ترتیب تصویر، مختصات ابتدا، مختصات انتها، رنگ و ضخامت میباشند.
تابع رسم مستطیل در OpenCV
برای رسم مستطیل به مختصات گوشه بالا سمت چپ و گوشه پایین سمت راست مستطیل نیاز دارید.
cv2.rectangle(img,(205,205),(305,305),(0,255,0),3)
این بار یک مربع سبز را در وسط صفحه کشیدیم. این مربع در نرم افزار OpenCV دارای ضخامت ۳ پیکسل و طول ضلع ۱۰۰ پیکسل میباشد. آرگومانهای مورد استفاده در cv2.rectangle به ترتیب تصویر، مختصات گوشه بالا سمت چپ، مختصات گوشه پایین سمت راست، رنگ، ضخامت میباشد.
تابع رسم دایره در OpenCV
برای رسم دایره به مختصات مرکز و شعاع آن نیاز داریم.
cv2.circle(img,(255,255), 47, (0,0,255), -1)
حال یک دایره قرمز توپر را در وسط صفحه نرم افزار OpenCV و درون مربع کشیدیم. این دایره دارای شعاع ۴۷ پیکسل میباشد. آرگومانهای مورد استفاده در cv2.circle به ترتیب تصویر، مختصات مرکز دایره، شعاع دایره، رنگ، ضخامت میباشد.
تابع رسم بیضی در OpenCV
برای رسم بیضی به چندین مشخصه از جمله مختصات مرکز بیضی، طول محورها، زاویه چرخش بیضی در جهت عقربههای ساعت، زاویه شروع و زاویه قوس بیضی نیازمندیم.
cv2.ellipse(img,(255,308),(100,50),0,0,180,(255,0,255),-1)
اکنون در نرم افزار OpenCV یک نیم بیضی بنفش توپر زیر مربع داریم. طول محور اصلی آن ۱۰۰ و طول محور فرعی آن ۵۰ پیکسل میباشد. آرگومانهای مورد استفاده در cv2.ellipse به ترتیب تصویر، مختصات مرکز بیضی، طول محورهای اصلی و فرعی، زاویه چرخش بیضی در جهت عقربههای ساعت، زاویه شروع بیضی، زاویه پایان بیضی، رنگ، ضخامت میباشد.
تابع رسم چند ضلعی در OpenCV
برای رسم چند ضلعی در نرم افزار OpenCV به مختصات تمامی راسهای چند ضلعی بصورت یک آرایه نیاز داریم.
pts = np.array([[500,100],[480,10],[460,100],[480,60]], np.int32) pts = pts.reshape((-1,1,2)) cv2.polylines(img,[pts],True,(0,255,255))
اینبار یک ۴ ضلعی فلش مانند زرد در گوشه سمت راست بالا ایجاد کردیم. همانطور که میبینید ابتدا یک آرایه مختصات راسها از نوع int32 با کتابخانه numpy ایجاد کردیم. سپس آن را بصورتی ذخیره کردیم تا امکان استفاده در نرم افزار openCV را داشته باشد. آرگومانهای مورد استفاده در cv2.polylines به ترتیب تصویر، آرایه مختصات راسها، مشخص بودن اینکه نقطه ابتدایی و انتهایی به هم متصل شوند یا خیر، رنگ میباشد. (در اینجا ضخامت را بصورت پیش فرض رها کردیم)
۳- تابع نوشتن متن در OpenCV
برای نوشتن متن به خود متن، مختصات شروع متن، فونت و مقیاس فونت نیاز داریم.
font = cv2.FONT_HERSHEY_SIMPLEX cv2.putText(img,'OpenCV',(10,500), font, 4,(255,255,255),2,cv2.CV_AA)
اکنون ما متن OpenCV را در پایین تصویر با رنگ سفید نمایش دادهایم. فونتهایی که میتوانید در نرم افزار OpenCV استفاده کنید عبارتند از:
محدودیت در دسترسی کامل به این مجموعه آموزش
دسترسی کامل به آموزش برای اعضای دیجی اسپارک امکان پذیر است. بخش اصلی آموزش شامل سورس کدهای توسعه داده شده توسط مهندسهای دیجی اسپارک است. به همین دلیل این آموزش خاص و یکتاست. برای استفاده از آن بایستی عضویت تهیه کنید. تبادل نظر با کاربران و پرسش سوال رایگان است و میتوانید از بخش نظرات همین آموزش اقدام کنید. |
FONT_ITALIC :کج کردن متن
متاسفانه در حال حاضر فقط امکان استفاده از متون با فرمت اسکی وجود دارد. این موضوع یعنی نمیتوانید از حروف فارسی استفاده کنید. آرگومانهای مورد استفاده در cv2.putText به ترتیب تصویر، متن، مختصات سمت چپ پایین متن، فونت، مقیاس فونت، رنگ، ضخامت و نوع خط میباشد. در این آموزش نوع خط برای زیبایی بیشتر cv2.CV_AA قرار داده شده است. نتیجه نهایی تصویری به این شکل است.
چنانچه در مراحل راه اندازی و انجام این پروژه با مشکل مواجه شدید، بدون هیچ نگرانی در انتهای همین پست، به صورت ثبت نظر سوالتان را مطرح کنید. من در سریعترین زمان ممکن پاسخ رفع مشکل شما را خواهم داد. همچنین اگر ایرادی در کدها و یا مراحل اجرایی وجود دارند میتوانید از همین طریق اطلاع رسانی کنید.
پروژه و دریافت بن ارسال رایگان
برای دریافت بن خرید از دانشجو کیت، کاربران بایستی با استفاده از وسایل این آموزش، پروژه را اجرا کرده و یا حتی مدار جدیدی تعریف کنید. سپس از اجرای کار فیلم گرفته و در شبکههای اجتماعی از جمله آپارات و اینستگرام، با هشتگهای دیجی_اسپارک و دانشجوکیت و digispark و daneshjookit منتشر کنند. سپس از طریق بخش نظرات در ادامه همین آموزش، جهت دریافت بن خرید ارسال رایگان به ارزش ۱۰۳۰۰ تومان از دانشجو کیت، لینک را زیر همین پست ارسال کنید.
در پایان نظرات و پیشنهادات خود را با ما درمیان بگذارید و با اشتراک گذاری این آموزش در شبکه های اجتماعی , از وبسایت دیجی اسپارک حمایت کنید.
سلام
مثل دو آموزش قبل کاملا حرفه ای و کامل توضیح دادین برای پست های قبل فراموش کردم کامنت بزارم ولی از هر دو استفاده کردم و دقیقا اجرا شد. از تیم دیجی اسپارک واقعا ممنونم.
سلام
از شما بابت نظر لطفتان سپاس گزاریم
سلام عالی بود، ممنون
سلام و سپاس از شما
باسلام و خسته نباشید خدمت تیم پرتوان دیجی اسپارک
آموزش بسیار مفید و کاربردی بود
درود خسته نباشید متن بسیار عالی بود و خیلی ازش استفاده کردم
فقط یک سوال داشتم اینکه برای رسم چند ضلعی کف گفتین ضخامت رو روی حالت پیش فرض رها کردین، چطوری باید ضخامت ۱- رو بهش بدم ک شکلم کامل رنگ بشه؟