python_developer
1.54K subscribers
3.74K photos
1.97K videos
232 files
434 links
کانال اموزش پایتون @Real_developer
تبلیغات پذیرفته میشود.
Download Telegram
Image from Wikipedia
💢Grayscale💢

ما همچنین با تصاویر سیاه و سفید کار خواهیم کرد. تصاویر خاکستری فقط دارای یک کانال رنگی در مقیاس 0 تا 255 هستند که نشان دهنده روشنایی آن پیکسل است، 0 کاملا تاریک (سیاه) و 255 کاملا روشن (سفید) است.
تبدیل تصویر به مقیاس خاکستری به ما آرایه ای دو بعدی از آن میدهد.
import numpy as np
import cv2
import matplotlib.pyplot as plt

img = cv2.imread('test.jpg')
gray_img = cv2.cvtColor(img, cv2.COLOR_RGB2GRAY)
print(gray_img)
[[76 76 76 ..., 57 57 57]
[59 59 58 ..., 58 58 58]
[58 58 57 ..., 58 58 58]
...,
[58 57 57 ..., 53 54 55]
[63 63 63 ..., 59 59 59]
[63 62 63 ..., 59 59 59]]
import numpy as np
import cv2
import matplotlib.pyplot as plt
img = cv2.imread('test.jpg')
gray_img = cv2.cvtColor(img, cv2.COLOR_RGB2GRAY)

plt.imshow(cv2.cvtColor(gray_img, cv2.COLOR_GRAY2RGB))
plt.show()
import numpy as np
import cv2
import matplotlib.pyplot as plt
img = cv2.imread('test.jpg')
average_color_per_row = np.average(img, axis=0)
average_color = np.average(average_color_per_row, axis=0)
average_color = np.uint8(average_color)

average_color_img = np.array([[average_color]*100]*100, np.uint8)

plt.imshow(average_color_img)
plt.show()
This media is not supported in your browser
VIEW IN TELEGRAM
💢تقسیم بندی💢
هنگامی که ما در حال تلاش برای جمع آوری اطلاعات در مورد یک تصویر هستیم، ابتدا باید آن را به ویژگی هایی که علاقه مند هستنم تقسیم کنیم. این تقسیم بندی نامیده می شود. تقسیم بندی تصویر فرآیند نمایش یک تصویر در بخش ها است تا آن را برای تجزیه و تحلیل آسان تر کند
import numpy as np
import cv2
import matplotlib.pyplot as plt
img = cv2.imread('test.jpg')
gray_img = cv2.cvtColor(img, cv2.COLOR_RGB2GRAY)

_, threshold_img = cv2.threshold(gray_img, 60, 255, cv2.THRESH_BINARY)

threshold_img = cv2.cvtColor(threshold_img, cv2.COLOR_GRAY2RGB)
plt.figure(figsize=(10,10))
plt.imshow(threshold_img)
plt.show()
این کار باعث میشود تصویر به راحتی به روشناییهای مختلف تقسیم شود. و این تنها مربوط به عکسهای خاکستری نیست و ما میتوانیم بخشهایی از عکسهای رنگی را با کانالهای رنگی تقسیم کنیم. آستانه رنگ با HSV بهترین کار را می کند.
به جای یافتن مقدار که تحت یک آستانه است،
ما می توانیم بخشی از تصویر را با رنگ هایی که در یک محدوده هستند پیدا کنیم
با cv2.inRange ().
import numpy as np
import cv2
import matplotlib.pyplot as plt

img = cv2.imread('test.jpg')
img_hsv = cv2.cvtColor(img, cv2.COLOR_BGR2HSV)

# threshold for hue channel in blue range
blue_min = np.array([100, 100, 100], np.uint8)
blue_max = np.array([140, 255, 255], np.uint8)
threshold_blue_img = cv2.inRange(img_hsv, blue_min, blue_max)

threshold_blue_img = cv2.cvtColor(threshold_blue_img, cv2.COLOR_GRAY2RGB)

plt.imshow(threshold_blue_img)

plt.show()
💢Masking with a binary threshold💢

حالا که میتوانیم رنگها را شناسایی کنیم، کارهای جالبی مثل استفاده از تصویر باینری به عنوان ماسک میتوانیم انجام دهیم.
یک ماسک معمولا یک ماتریس از صفرها (برای قطعاتی است که باید حذف شوند) و غیر صفر (برای قطعاتی که میخواهیم نگهداریم).
اگر بگم من یک نسخه از یک تصویر از یک منظره در فضای باز را که آسمان و دریا را منع می کند دوست دارم. ابتدا می توانیم پیکسل های موجود در محدوده رنگ آبی را پیدا کنیم که قسمت های آبی آسمان و دریا ی تصویر را شناسایی می کند. برای دریافت بخش هایی از تصویر که آسمان و دریا نیستند، ما می توانیم مقادیر با bitwise_not را معکوس کنیم، که قطعاتی را که آبی نیستند به ما می دهد و به ما ماسک می دهد.
import numpy as np
import cv2
import matplotlib.pyplot as plt

img = cv2.imread('5.jpg')

img_hsv = cv2.cvtColor(img, cv2.COLOR_BGR2HSV)
blue_min = np.array([100, 100, 100], np.uint8)
blue_max = np.array([140, 255, 255], np.uint8)
mask_inverse = cv2.inRange(img_hsv, blue_min, blue_max)

mask = cv2.bitwise_not(mask_inverse)

plt.imshow(cv2.cvtColor(mask, cv2.COLOR_GRAY2RGB))

plt.show()