ویژگیهای رابط کاربری در OpenCV
توابع ترسیم در OpenCV
هدف#
- یادگیری ترسیم اشکال هندسی مختلف با OpenCV
- با این توابع آشنا خواهید شد: ()cv.line، ()cv.circle، ()cv.rectangle، ()cv.ellipse، ()cv.putText و غیره.
کد#
در تمام توابع بالا، آرگومانهای مشترکی را به شرح زیر مشاهده خواهید کرد:
- img: تصویری که میخواهید اشکال را روی آن رسم کنید
- color: رنگ شکل. برای BGR، آن را به صورت یک چندتایی (tuple) ارسال کنید، مثلاً: (255,0,0) برای آبی. برای مقیاس خاکستری، کافی است یک مقدار اسکالر ارسال نمایید.
- thickness: ضخامت خط، دایره و غیره. اگر برای اشکال بسته مانند دایره مقدار 1- ارسال شود، شکل توپر رسم خواهد شد. ضخامت پیشفرض = 1
- lineType: نوع خط، از جمله پیوستگی ۸-تایی (8-connected)، خط ضد پلهپله شدن (anti-aliased) و غیره. به صورت پیشفرض، 8-connected است. مقدار cv.LINE_AA خطی بدون اعوجاج و نرم ایجاد میکند که برای منحنیها بسیار عالی به نظر میرسد.
رسم خط#
برای رسم یک خط، باید مختصات نقطه شروع و پایان خط را ارسال کنید. ما یک تصویر سیاه ایجاد کرده و یک خط آبی از گوشه بالا-چپ به گوشه پایین-راست روی آن رسم میکنیم.
import numpy as np
import cv2 as cv
# Create a black image
img = np.zeros((512,512,3), np.uint8)
# Draw a diagonal blue line with thickness of 5 px
cv.line(img,(0,0),(511,511),(255,0,0),5)
رسم مستطیل#
برای رسم یک مستطیل، به مختصات گوشه بالا-چپ و گوشه پایین-راست مستطیل نیاز دارید. این بار ما یک مستطیل سبز در گوشه بالا-راست تصویر رسم میکنیم.
cv.rectangle(img,(384,0),(510,128),(0,255,0),3)
رسم دایره#
برای رسم یک دایره، به مختصات مرکز و شعاع آن نیاز دارید. ما یک دایره درون مستطیلی که در بالا رسم شده میکشیم.
cv.circle(img,(447,63), 63, (0,0,255), -1)
رسم بیضی#
برای رسم بیضی، باید چندین آرگومان ارسال کنیم. یک آرگومان مختصات مرکز (x,y) است. آرگومان بعدی طول محورها است (طول نیمقطر بزرگ، طول نیمقطر کوچک). پارامتر angle زاویه دوران بیضی در جهت پادساعتگرد است. startAngle و endAngle شروع و پایان کمان بیضی را نشان میدهند که در جهت ساعتگرد نسبت به محور اصلی سنجیده میشوند؛ یعنی دادن مقادیر 0 و 360 بیضی کامل را رسم میکند. برای جزئیات بیشتر، مستندات ()cv.ellipse را بررسی کنید. مثال زیر یک نیمبیضی در مرکز تصویر رسم میکند.
cv.ellipse(img,(256,256),(100,50),0,0,180,255,-1)
رسم چندضلعی (Polygon)#
برای رسم یک چندضلعی، ابتدا به مختصات رأسها نیاز دارید. این نقاط را به یک آرایه با شکل ROWSx1x2 تبدیل کنید که در آن ROWS تعداد رأسها است و نوع داده آن باید int32 باشد. در اینجا یک چندضلعی کوچک با چهار رأس به رنگ زرد رسم میکنیم.
pts = np.array([[10,5],[20,30],[70,20],[50,10]], np.int32)
pts = pts.reshape((-1,1,2))
cv.polylines(img,[pts],True,(0,255,255))
افزودن متن به تصاویر:#
برای قرار دادن متن در تصاویر، باید موارد زیر را مشخص کنید:
- داده متنی که میخواهید بنویسید
- مختصات موقعیتی جایی که میخواهید متن قرار گیرد (یعنی گوشه پایین-چپ جایی که متن شروع میشود).
- نوع فونت (برای فونتهای پشتیبانیشده به مستندات ()cv.putText مراجعه کنید)
- مقیاس فونت (اندازه قلم را مشخص میکند)
- موارد متداول مانند رنگ، ضخامت، lineType و غیره. برای ظاهر بهتر، استفاده از lineType = cv.LINE_AA توصیه میشود.
ما کلمه OpenCV را به رنگ سفید روی تصویرمان خواهیم نوشت.
font = cv.FONT_HERSHEY_SIMPLEX
cv.putText(img,'OpenCV',(10,500), font, 4,(255,255,255),2,cv.LINE_AA)
نتیجه#
اکنون زمان دیدن نتیجه نهایی طراحی و رسم ما فرا رسیده است. همانطور که در مقالات قبلی آموختید، تصویر را نمایش دهید تا آن را مشاهده کنید.

منابع اضافی#
- زوایای استفادهشده در تابع بیضی، زوایای دایرهای معمولی ما نیستند. برای جزئیات بیشتر به این بحث مراجعه نمایید.
تمرینها#
- سعی کنید لوگوی OpenCV را با استفاده از توابع ترسیم موجود در OpenCV رسم کنید.