From 62430852bd9866360eee960ad58ca13b604156db Mon Sep 17 00:00:00 2001 From: Ali Date: Mon, 29 Jul 2024 00:30:16 +0430 Subject: [PATCH] chapter4 added --- src/04.DrawingFunc.md | 76 ++++++++++++++++++++++++++++++++++ src/SUMMARY.md | 1 + src/assets/drawing_result.jpg | Bin 0 -> 14390 bytes 3 files changed, 77 insertions(+) create mode 100644 src/04.DrawingFunc.md create mode 100644 src/assets/drawing_result.jpg diff --git a/src/04.DrawingFunc.md b/src/04.DrawingFunc.md new file mode 100644 index 0000000..ef95d0a --- /dev/null +++ b/src/04.DrawingFunc.md @@ -0,0 +1,76 @@ +# اهداف +* یادگیری ترسیم انواع شکل های هندسی +* یادگیری توابع ` cv.line(), cv.circle() , cv.rectangle(), cv.ellipse(), cv.putText()` + +# کد +همه توابعی که در نمونه کد خواهیم دید همه ورودی های مشترکی خواهند داشت +`img` : عکسی که در آن میخواهیم چیزی را رسم کنیم. +`color` : رنگ اشکل ها. برای RGB کافیست یک تاپل به عنوان ورودی دهیم به عنوان مثال (255,0,0) برای آبی و برای . +`thickness` : ضخامت هر خط یا دایره و ... اگر برای اشکال بسته مانند دایر عدد -1 به عنوان ورودی داده شود داخل شکل پر خواهد شد . ورودی پیش فرض : -1 +`lineType` : نوع خط مانند 8-connected پیش فرض : 8-connected. `cv.LINE_AA` برای منحنی ها گزینه خوبی است + + +## رسم خط +برای رسم خط باید مختصات ابتدا و انتهای خط داده شود. برای رسم یک خط آبی در صفحه مشکی که از بالا چپ به راست پایین است اینگونه عمل میکنیم. + +```python + +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) + +``` + +## رسم مستطیل + +برای رسم مستطیل نیاز به مختصات بالا چپ و پایین راست مستطیل داریم. +این دفعه یک مسطیل سبز رسم میکنیم. + +```python +cv.rectangle(img,(384,0),(510,128),(0,255,0),3) +``` + +## رسم دایره +برای رسم دایره نیاز به شعاع و مختصات مرکز داریم. +```python +cv.circle(img,(447,63), 63, (0,0,255), -1) +``` +## رسم بیضی + +برای رسم بیضی نیاز به چند ورودی داریم +* مختصات مرکز به صورت (x,y) +* طول قطر های بیضی +* زاویه چرخش بیضی در خلاف جهت عقربه های ساعت , زاویه شروع و پایان نشان دهنده شروع و پایان کمان بیضی است که در جهت عقربه های ساعت از محور اصلی اندازه گیری می شود. دادن مقادیر 0 و 360 نشان دهند بیضی کامل است. +کد زیر نیمه بیضی در مرکز تصویر رسم میکند. +```python +cv.ellipse(img,(256,256),(100,50),0,0,180,255,-1) +``` + +# رسم چند ضلعی +برای رسم چند ضلعی به مختصات رئوس نیاز داریم. +آن نقاط را به آرایه ای به شکل ROWSx1x2 تبدیل میکنیم به صورتی که ROWS تعداد رئوس را نشان میدهد و باید به صورت int32 باشد. +یک نمومنه چد ضلعی زرد رنگ : +```python +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)) +``` + +# اضافه کردن نوشته به عکس +برای قرارد دادن نوشته روی عکس نیاز به : +* نوشته مورد نظر +* مختصات مورد نظر که میخواهیم نوشته را روی آن قرار دهیم +* نوع فونت +* اندازه فونت +* چیز های معمولی مثل رنگ , ضخامت , نوع خط و ... `lineType = cv.LINE_AA` پیشنهاد میشود. + +```python +font = cv.FONT_HERSHEY_SIMPLEX +cv.putText(img,'OpenCV',(10,500), font, 4,(255,255,255),2,cv.LINE_AA) +``` +![resault](./assets/drawing_result.jpg) \ No newline at end of file diff --git a/src/SUMMARY.md b/src/SUMMARY.md index 6b1ce36..1705043 100644 --- a/src/SUMMARY.md +++ b/src/SUMMARY.md @@ -3,3 +3,4 @@ - [نصب و راه اندازی](./01.installation.md) - [ شروع به کار با عکس](./02.StartWithImage.md) - [شروع به کار با ویدیو](./03.StartWithVideo.md) +- [توابع رسم](./04.DrawingFunc.md) \ No newline at end of file diff --git a/src/assets/drawing_result.jpg b/src/assets/drawing_result.jpg new file mode 100644 index 0000000000000000000000000000000000000000..812c79475dd6eb733dc1c51b9252f7ab1d0d64f6 GIT binary patch literal 14390 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