generated from persianccbook/booktemplates
-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
Showing
4 changed files
with
96 additions
and
1 deletion.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,94 @@ | ||
# هدف | ||
* یادگرفتن عملیات های محاسباتی مانند اضافه کردن و کم کردن | ||
* یادگیری توابع ` cv.add(), cv.addWeighted()` | ||
|
||
## اضافه کردن | ||
شما میتونید دو عکس رو با تابع ` cv.add()` به هم اضافه کنید یا به صورت ساده تر | ||
توسط کتابخانه numpy , `res = img1 + img2` توجه کنید دو عکس باید هم نوع و عمق یکسانی داشته باشند یا تصویر دوم فقط یک مقدار اسکالر باشد | ||
|
||
به عنوان مثال | ||
```python | ||
>>> x = np.uint8([250]) | ||
>>> y = np.uint8([10]) | ||
|
||
>>> print( cv.add(x,y) ) # 250+10 = 260 => 255 | ||
[[255]] | ||
|
||
>>> print( x+y ) # 250+10 = 260 % 256 = 4 | ||
[4] | ||
``` | ||
توجه کنید که استفاده از توابع خود کتابخانه نتیجه بهتری به ما میدهند | ||
|
||
## Image Blending | ||
|
||
این نیز ترکیب دوعکس است با این تفاوت که وزن به هر عکس داده میشود که باعت ترکیب شدن بهتر میشود و حس شفافیت بهتری دارد | ||
معادله آن : `dst = α⋅img1 + β⋅img2 + γ` | ||
* `α` - وزن تصویر اول | ||
* `β` - وزن تصویر دوم | ||
* `γ` - یک مقدار ثابت | ||
|
||
توجه داشته باشید که جمع دو وزن باید 1 شود | ||
|
||
مثال زیر از یک ترکیب دوعکس با وزن 0.7 و 0.3 است و سپس تابع `cv.addWeighted()` معادله را در آن اعمال میکند | ||
در این مثال `γ` صفر داده شده | ||
|
||
```python | ||
|
||
img1 = cv.imread('ml.png') | ||
img2 = cv.imread('opencv-logo.png') | ||
assert img1 is not None, "file could not be read, check with os.path.exists()" | ||
assert img2 is not None, "file could not be read, check with os.path.exists()" | ||
|
||
dst = cv.addWeighted(img1,0.7,img2,0.3,0) | ||
|
||
cv.imshow('dst',dst) | ||
cv.waitKey(0) | ||
cv.destroyAllWindows() | ||
|
||
``` | ||
![image](./assets/blending.jpg) | ||
|
||
|
||
## عملیات های بیتی | ||
شامل عملیات بیتی AND، OR، NOT، و XOR میشود | ||
این عملیات برای استخراج های بخش های عکس بسیار مفید خواهد بود | ||
مانند نواحی مورد علاقه(ROI) غیر مستطیلی | ||
در مثال زیر خواهیم دید چگونه یک قسمت خاصی از عکس رو تغییر بدیم | ||
|
||
میخواهیم یک لوگو رو روی عکس قرار بدیم , نمیتونیم دو عکس رو به هم اضافه کنیم چون رنگ تغییر میکنه | ||
ترکیب هم نمیتونیم بکنیم چون یک حالت شفاف به ما میده و من میخواهیم لوگو مات باشه , برای همین از عملیات های بیتی استفاده میکنم | ||
|
||
```python | ||
# Load two images | ||
img1 = cv.imread('messi5.jpg') | ||
img2 = cv.imread('opencv-logo-white.png') | ||
assert img1 is not None, "file could not be read, check with os.path.exists()" | ||
assert img2 is not None, "file could not be read, check with os.path.exists()" | ||
|
||
# I want to put logo on top-left corner, So I create a ROI | ||
rows,cols,channels = img2.shape | ||
roi = img1[0:rows, 0:cols] | ||
|
||
# Now create a mask of logo and create its inverse mask also | ||
img2gray = cv.cvtColor(img2,cv.COLOR_BGR2GRAY) | ||
ret, mask = cv.threshold(img2gray, 10, 255, cv.THRESH_BINARY) | ||
mask_inv = cv.bitwise_not(mask) | ||
|
||
# Now black-out the area of logo in ROI | ||
img1_bg = cv.bitwise_and(roi,roi,mask = mask_inv) | ||
|
||
# Take only region of logo from logo image. | ||
img2_fg = cv.bitwise_and(img2,img2,mask = mask) | ||
|
||
# Put logo in ROI and modify the main image | ||
dst = cv.add(img1_bg,img2_fg) | ||
img1[0:rows, 0:cols ] = dst | ||
|
||
cv.imshow('res',img1) | ||
cv.waitKey(0) | ||
cv.destroyAllWindows() | ||
``` | ||
در قسمت چپ عکس زیر ماسکی است که ساختیم و عکس سمت راست نتیجه رو نشون میده | ||
![img](./assets/overlay.jpg) | ||
|
||
برای تمرین میتونید که اسلاید شو بسازید که عکس ها خیلی نرم تغییر میکنند |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.