Skip to content

Commit

Permalink
ArithmeticOperation
Browse files Browse the repository at this point in the history
  • Loading branch information
opaip committed Sep 27, 2024
1 parent fd8206a commit 77a62ba
Show file tree
Hide file tree
Showing 4 changed files with 96 additions and 1 deletion.
94 changes: 94 additions & 0 deletions src/08.ArithmeticOperation.md
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)

برای تمرین میتونید که اسلاید شو بسازید که عکس ها خیلی نرم تغییر میکنند
3 changes: 2 additions & 1 deletion src/SUMMARY.md
Original file line number Diff line number Diff line change
Expand Up @@ -6,4 +6,5 @@
- [توابع رسم](./04.DrawingFunc.md)
- [مدیریت موس](./05.MouseHandling.md)
- [پنل رنگ](./06.ColorPallette.md)
- [عملیات های پایه ای روی عکس](./07.ImageCoreOperation.md)
- [عملیات های پایه ای روی عکس](./07.ImageCoreOperation.md)
- [عملیات های محاسباتی ریاضیاتی روی عکس](./08.ArithmeticOperation.md)
Binary file added src/assets/blending.jpg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added src/assets/overlay.jpg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.

0 comments on commit 77a62ba

Please sign in to comment.