پردازش تصویر با پایتون — راهنمای کاربردی

پردازش تصویر با پایتون یکی از شاخه‌های مهم علوم کامپیوتر است که به تحلیل و دستکاری تصاویر دیجیتال «Digital images» می‌پردازد. در سال‌های اخیر، پردازش تصویر «Image processing» به بخش اساسی بسیاری از پروژه‌ها «Projects» و فناوری‌ها «Technologies» در حوزه‌های مختلفی از جمله بینایی کامپیوتری، هوش مصنوعی و یادگیری ماشین تبدیل شده است. پایتون به عنوان یکی از زبان‌های محبوب برنامه‌نویسی در این زمینه شناخته می‌شود و به دلیل سادگی، خوانایی و قابلیت‌های گسترده‌ای که ارائه می‌دهد، به یکی از انتخاب‌های اصلی برای انجام عملیات پیچیده پردازش تصویر با پایتون تبدیل شده است.

مقدمه

کتابخانه‌های مختلفی برای پردازش تصویر با پایتون وجود دارد که هرکدام ابزارهای خاصی برای حل مسائل مختلف دارند. از جمله معروف‌ترین این کتابخانه‌ها می‌توان به OpenCV ، Pillow و scikit-image  اشاره کرد. این کتابخانه‌ها به کاربران این امکان را می‌دهند تا عملیات مختلفی از جمله تغییر اندازه تصاویر، اعمال فیلترها، تشخیص لبه‌ها، شناسایی اشیا و حتی تحلیل ویدیو را به راحتی انجام دهند. استفاده از این ابزارها در پروژه‌های پردازش تصویر با پایتون به توسعه‌دهندگان کمک می‌کند تا به نتایج دقیق‌تر و کارآمدتر دست یابند و از قابلیت‌های پیشرفته‌تری در تحلیل تصاویر بهره‌مند شوند.

پردازش تصویر با پایتون یک حوزه در حال رشد سریع با کاربردهای گسترده است. از این فناوری در صنایع مختلفی از جمله بینایی کامپیوتری، تصویربرداری پزشکی، امنیت و … استفاده می‌شود. در این مقاله، از سری مقاله های مجله پی استور به بررسی نحوه استفاده از OpenCV پردازش تصویر با پایتون می‌پردازیم.

پردازش تصویر با پایتون چیست؟

پردازش تصویر با پایتون شاخه‌ای از علم و کاربرد است که به اصلاح و تحلیل تصاویر دیجیتال با استفاده از الگوریتم‌های کامپیوتری می‌پردازد. هدف از پردازش تصویر، بهبود کیفیت بصری تصاویر، استخراج اطلاعات مفید و آماده‌سازی تصاویر برای تحلیل یا تفسیر بیشتر است.

پردازش تصویر در پایتون با استفاده از OpenCV

OpenCV (بینایی کامپیوتری متن‌باز) یک کتابخانه قدرتمند و پرکاربرد برای انجام وظایف پردازش تصویر و بینایی کامپیوتری است. این کتابخانه مجموعه‌ای جامع از توابع و ابزارهایی را ارائه می‌دهد که توسعه برنامه‌های مرتبط با تصاویر و ویدئوها را آسان می‌کند.

در حالی که گرفتن عکس تنها با فشردن یک دکمه انجام می‌شود، پردازش و بهبود این تصاویر گاهی نیازمند بیش از چند خط کد است. در اینجاست که کتابخانه‌های پردازش تصویر با پایتون مانند OpenCV به کمک ما می‌آیند. OpenCV یک بسته متن‌باز محبوب است که طیف وسیعی از قابلیت‌ها و روش‌های پردازش تصویر و بینایی کامپیوتری را پوشش می‌دهد. این کتابخانه از چندین زبان برنامه‌نویسی از جمله پایتون، ++C و جاوا پشتیبانی می‌کند و برای کاربردهای بلادرنگ بهینه‌سازی شده است.

پردازش تصویر با پایتون

ما عملیات رایجی را که معمولاً برای افزایش داده‌ها هنگام آموزش مدل استفاده می‌شوند، بررسی خواهیم کرد.

عکس برای پردازش تصویر با پایتون

تغییر اندازه تصویر با پایتون

عملیات مقیاس‌بندی باعث افزایش یا کاهش اندازه یک تصویر می‌شود. در OpenCV، برای تغییر اندازه تصویر از تابع ()cv2.resize استفاده می‌شود. این تابع چندین آرگومان را دریافت می‌کند که در ادامه توضیح داده خواهند شد.

cv2.resize(src, dsize,interpolation)
Here,
src          :The image to be resized.
dsize        :The desired width and height of the resized image.
interpolation:The interpolation method to be used.

هنگام تغییر اندازه تصویر در پایتون، روش درونیابی تعیین می‌کند که پیکسل‌های جدید چگونه محاسبه شوند. چندین تکنیک درونیابی وجود دارد که هرکدام بین کیفیت و سرعت، موازنه خاصی دارند.

نکته مهم این است که تغییر اندازه تصویر ممکن است باعث کاهش کیفیت آن شود، زیرا پیکسل‌های جدید از طریق میان‌یابی بین پیکسل‌های موجود محاسبه می‌شوند و این می‌تواند مقداری تاری ایجاد کند.

# Import the necessary libraries
import cv2
import numpy as np
import matplotlib.pyplot as plt

# Load the image
image = cv2.imread('Ganeshji.webp')

# Convert BGR image to RGB
image_rgb = cv2.cvtColor(image, cv2.COLOR_BGR2RGB)

# Define the scale factor
# Increase the size by 3 times
scale_factor_1 = 3.0  
# Decrease the size by 3 times
scale_factor_2 = 1/3.0

# Get the original image dimensions
height, width = image_rgb.shape[:2]

# Calculate the new image dimensions
new_height = int(height * scale_factor_1)
new_width = int(width * scale_factor_1)

# Resize the image
zoomed_image = cv2.resize(src =image_rgb, 
                          dsize=(new_width, new_height), 
                          interpolation=cv2.INTER_CUBIC)

# Calculate the new image dimensions
new_height1 = int(height * scale_factor_2)
new_width1 = int(width * scale_factor_2)

# Scaled image
scaled_image = cv2.resize(src= image_rgb, 
                          dsize =(new_width1, new_height1), 
                          interpolation=cv2.INTER_AREA)

# Create subplots
fig, axs = plt.subplots(1, 3, figsize=(10, 4))

# Plot the original image
axs[0].imshow(image_rgb)
axs[0].set_title('Original Image Shape:'+str(image_rgb.shape))

# Plot the Zoomed Image
axs[1].imshow(zoomed_image)
axs[1].set_title('Zoomed Image Shape:'+str(zoomed_image.shape))

# Plot the Scaled Image
axs[2].imshow(scaled_image)
axs[2].set_title('Scaled Image Shape:'+str(scaled_image.shape))

# Remove ticks from the subplots
for ax in axs:
    ax.set_xticks([])
    ax.set_yticks([])

# Display the subplots
plt.tight_layout()
plt.show()

خروجی:عکس برای پردازش تصویر با پایتون

چرخش تصویر با پایتون

تصاویر را می‌توان در جهت عقربه‌های ساعت یا خلاف آن، به هر زاویه‌ای چرخاند. برای این کار، باید یک ماتریس چرخش تعریف کنیم که شامل نقطه چرخش، زاویه چرخش و ضریب مقیاس باشد.

ایجاد ماتریس چرخش با پایتون

برای ایجاد ماتریس چرخش در OpenCV از تابع ()cv2.getRotationMatrix2D استفاده می‌شود. این تابع سه مقدار دریافت می‌کند:

  • نقطه مرکز چرخش تصویر
  • زاویه چرخش برحسب درجه
  • ضریب مقیاس

اعمال تغییرات بر تصویر با پایتون

پس از ایجاد ماتریس چرخش، برای اعمال آن روی تصویر از تابع ()cv2.warpAffine استفاده می‌شود. این تابع سه مقدار دریافت می‌کند:

  • تصویری که باید تغییر کند
  • ماتریس تبدیل
  • اندازه تصویر خروجی

زاویه چرخش می‌تواند مثبت یا منفی باشد. زاویه مثبت تصویر را در جهت عقربه‌های ساعت و زاویه منفی در خلاف جهت عقربه‌های ساعت می‌چرخاند.

ضریب مقیاس نیز برای تغییر اندازه تصویر استفاده می‌شود. اگر مقدار آن ۱ باشد، اندازه تصویر ثابت می‌ماند، اما مقدار ۲ اندازه تصویر را دو برابر می‌کند.

# Import the necessary Libraries
import cv2
import matplotlib.pyplot as plt

# Read image from disk.
img = cv2.imread('Ganeshji.webp')

# Convert BGR image to RGB
image_rgb = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)

# Image rotation parameter
center = (image_rgb.shape[1] // 2, image_rgb.shape[0] // 2)
angle = 30
scale = 1

# getRotationMatrix2D creates a matrix needed for transformation.
rotation_matrix = cv2.getRotationMatrix2D(center, angle, scale)

# We want matrix for rotation w.r.t center to 30 degree without scaling.
rotated_image = cv2.warpAffine(image_rgb, rotation_matrix, (img.shape[1], img.shape[0]))

# Create subplots
fig, axs = plt.subplots(1, 2, figsize=(7, 4))

# Plot the original image
axs[0].imshow(image_rgb)
axs[0].set_title('Original Image')

# Plot the Rotated image
axs[1].imshow(rotated_image)
axs[1].set_title('Image Rotation')

# Remove ticks from the subplots
for ax in axs:
    ax.set_xticks([])
    ax.set_yticks([])

# Display the subplots
plt.tight_layout()
plt.show()

خروجی:عکس برای پردازش تصویر با پایتون

انتقال تصویر با پایتون

انتقال تصویر به معنای جابه‌جا کردن آن در یک چارچوب مشخص در راستای محور x و y است.

ایجاد ماتریس انتقال

برای انتقال تصویر در OpenCV، باید یک ماتریس تبدیل ایجاد کنیم. این ماتریس یک ماتریس ۲×۳ است که میزان جابه‌جایی را در هر جهت مشخص می‌کند.

اعمال انتقال به تصویر

برای اعمال این تغییر از تابع ()cv2.warpAffine استفاده می‌شود که سه مقدار دریافت می‌کند:

  • تصویر ورودی
  • ماتریس تبدیل
  • اندازه تصویر خروجی

مقادیر tx و ty در ماتریس تبدیل مشخص می‌کنند که تصویر چقدر در راستای محور x و y جابه‌جا شود. مقدار tx میزان انتقال در محور x و مقدار ty میزان انتقال در محور y را تعیین می‌کند.

# Import the necessary Libraries
import cv2
import matplotlib.pyplot as plt

# Read image from disk.
img = cv2.imread('Ganesh.jpg')
# Convert BGR image to RGB
image_rgb = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)

width = image_rgb.shape[1]
height = image_rgb.shape[0]

tx = 100
ty = 70

# Translation matrix
translation_matrix = np.array([[1, 0, tx], [0, 1, ty]], dtype=np.float32)
# warpAffine does appropriate shifting given the Translation matrix.
translated_image = cv2.warpAffine(image_rgb, translation_matrix, (width, height))

# Create subplots
fig, axs = plt.subplots(1, 2, figsize=(7, 4))

# Plot the original image
axs[0].imshow(image_rgb)
axs[0].set_title('Original Image')

# Plot the transalted image
axs[1].imshow(translated_image)
axs[1].set_title('Image Translation')

# Remove ticks from the subplots
for ax in axs:
    ax.set_xticks([])
    ax.set_yticks([])

# Display the subplots
plt.tight_layout()
plt.show()

خروجی:عکس برای پردازش تصویر با پایتون

تغییر شکل تصویر در پایتون

تغییر شکل«Shearing» یک تبدیل هندسی است که باعث کج شدن تصویر در راستای یک یا هر دو محور x و y می‌شود.

ایجاد ماتریس تغییر شکل در پایتون

برای انجام این تبدیل در OpenCV، باید یک ماتریس تبدیل «Transformation matrix» ایجاد کنیم. این ماتریس یک ماتریس ۲×۳ است که میزان تغییر شکل را در هر جهت مشخص می‌کند.

اعمال تغییر شکل به تصویر در پایتون

برای اعمال این تغییر از تابع ()cv2.warpAffine استفاده می‌شود که سه مقدار دریافت می‌کند:

  • تصویر ورودی
  • ماتریس تبدیل
  • اندازه تصویر خروجی

مقادیر shearX و shearY در ماتریس تبدیل تعیین می‌کنند که تصویر چقدر در راستای محور x و y دچار تغییر شکل شود. مقدار shearX مقدار تغییر در محور x و مقدار shearY مقدار تغییر در محور y را مشخص می‌کند.

# Import the necessary Libraries
import cv2
import numpy as np
import matplotlib.pyplot as plt

# Load the image
image = cv2.imread('Ganesh.jpg')

# Convert BGR image to RGB
image_rgb = cv2.cvtColor(image, cv2.COLOR_BGR2RGB)

# Image shape along X and Y
width = image_rgb.shape[1]
height = image_rgb.shape[0]

# Define the Shearing factor
shearX = -0.15
shearY = 0

# Define the Transformation matrix for shearing
transformation_matrix = np.array([[1, shearX, 0], 
                                  [۰, ۱, shearY]], dtype=np.float32)
# Apply shearing
sheared_image = cv2.warpAffine(image_rgb, transformation_matrix, (width, height))

# Create subplots
fig, axs = plt.subplots(1, 2, figsize=(7, 4))

# Plot the original image
axs[0].imshow(image_rgb)
axs[0].set_title('Original Image')

# Plot the Sheared image
axs[1].imshow(sheared_image)
axs[1].set_title('Sheared image')

# Remove ticks from the subplots
for ax in axs:
    ax.set_xticks([])
    ax.set_yticks([])

# Display the subplots
plt.tight_layout()
plt.show()

خروجی:عکس برای پردازش تصویر با پایتون

نرمال‌ سازی تصویر با پایتون

نرمال‌سازی تصویر فرآیندی است که مقدار پیکسل‌های یک تصویر را در یک بازه خاص مقیاس‌بندی می‌کند. این کار معمولاً برای بهبود عملکرد الگوریتم‌های پردازش تصویر انجام می‌شود، زیرا بسیاری از الگوریتم‌ها زمانی که مقدار پیکسل‌ها در یک محدوده مشخص باشد، بهتر عمل می‌کنند.

نرمال‌ سازی در OpenCV با پایتون

در OpenCV، تابع ()cv2.normalize برای نرمال‌سازی تصویر استفاده می‌شود. این تابع چندین مقدار دریافت می‌کند:

  • تصویر ورودی
  • تصویر خروجی
  • حداقل و حداکثر مقدار برای مقیاس‌بندی پیکسل‌ها
  • نوع نرمال‌سازی
  • نوع داده تصویر خروجی

نوع نرمال‌سازی مشخص می‌کند که پیکسل‌ها چگونه مقیاس‌بندی شوند. روش‌های مختلفی برای نرمال‌سازی وجود دارد که هر کدام بین دقت و سرعت موازنه خاصی دارند.

کاربرد نرمال‌ سازی با پایتون

نرمال‌سازی تصویر یک مرحله پیش‌پردازش رایج در بسیاری از وظایف پردازش تصویر با پایتون است و می‌تواند عملکرد الگوریتم‌هایی مانند طبقه‌بندی تصویر، تشخیص اشیا و بخش‌بندی تصویر را بهبود ببخشد.

# Import the necessary Libraries
import cv2
import numpy as np
import matplotlib.pyplot as plt

# Load the image
image = cv2.imread('Ganesh.jpg')

# Convert BGR image to RGB
image_rgb = cv2.cvtColor(image, cv2.COLOR_BGR2RGB)

# Split the image into channels
b, g, r = cv2.split(image_rgb)

# Normalization parameter
min_value = 0
max_value = 1
norm_type = cv2.NORM_MINMAX

# Normalize each channel
b_normalized = cv2.normalize(b.astype('float'), None, min_value, max_value, norm_type)
g_normalized = cv2.normalize(g.astype('float'), None, min_value, max_value, norm_type)
r_normalized = cv2.normalize(r.astype('float'), None, min_value, max_value, norm_type)

# Merge the normalized channels back into an image
normalized_image = cv2.merge((b_normalized, g_normalized, r_normalized))
# Normalized image
print(normalized_image[:,:,0])

plt.imshow(normalized_image)
plt.xticks([])
plt.yticks([])
plt.title('Normalized Image')
plt.show()

خروجی:

[[۰.۰۷۴۵۰۹۸  ۰.۰۷۴۵۰۹۸  ۰.۰۷۴۵۰۹۸  ... ۰.۰۷۸۴۳۱۳۷ ۰.۰۷۸۴۳۱۳۷ ۰.۰۷۸۴۳۱۳۷]
 [۰.۰۷۴۵۰۹۸  ۰.۰۷۴۵۰۹۸  ۰.۰۷۴۵۰۹۸  ... ۰.۰۷۸۴۳۱۳۷ ۰.۰۷۸۴۳۱۳۷ ۰.۰۷۸۴۳۱۳۷]
 [۰.۰۷۴۵۰۹۸  ۰.۰۷۴۵۰۹۸  ۰.۰۷۴۵۰۹۸  ... ۰.۰۷۸۴۳۱۳۷ ۰.۰۷۸۴۳۱۳۷ ۰.۰۷۸۴۳۱۳۷]
 ...
 [۰.۰۰۳۹۲۱۵۷ ۰.۰۰۳۹۲۱۵۷ ۰.۰۰۳۹۲۱۵۷ ... ۰.۰۷۴۵۰۹۸  ۰.۰۷۴۵۰۹۸  ۰.۰۷۴۵۰۹۸ ]
 [۰.۰۰۳۹۲۱۵۷ ۰.۰۰۳۹۲۱۵۷ ۰.۰۰۳۹۲۱۵۷ ... ۰.۰۷۴۵۰۹۸  ۰.۰۷۴۵۰۹۸  ۰.۰۷۴۵۰۹۸ ]
 [۰.۰۰۳۹۲۱۵۷ ۰.۰۰۳۹۲۱۵۷ ۰.۰۰۳۹۲۱۵۷ ... ۰.۰۷۴۵۰۹۸  ۰.۰۷۴۵۰۹۸  ۰.۰۷۴۵۰۹۸ ]]

عکس برای پردازش تصویر با پایتون

تشخیص لبه‌ های تصویر در پایتون

فرآیند تشخیص لبه‌های تصویر شامل شناسایی لبه‌های تیز و واضح در تصویر است. این فرآیند در زمینه‌های شناسایی تصویر یا مکان‌یابی/تشخیص اشیا بسیار ضروری است. به دلیل کاربرد وسیع، الگوریتم‌های مختلفی برای تشخیص لبه‌ها وجود دارد.

در پردازش تصویر با پایتون و برنامه‌های بینایی کامپیوتری، تشخیص لبه کاننی «Canny Edge Detection» یکی از محبوب‌ترین روش‌ها برای تشخیص لبه‌ها است. در این روش، ابتدا تصویر صاف می‌شود تا نویز کاهش یابد، سپس گرادیان آن محاسبه می‌شود و در نهایت یک آستانه به گرادیان اعمال می‌شود. روش چندمرحله‌ای تشخیص لبه کاننی شامل مراحل زیر است:

  • صاف‌سازی گوسی: تصویر با استفاده از فیلتر گوسی صاف می‌شود تا نویز حذف گردد.
  • محاسبه گرادیان: گرادیان تصویر با استفاده از اپراتور Sobel محاسبه می‌شود.
  • حذف حداکثر‌های غیرواقعی: در این مرحله از تصویر گرادیان، لبه‌های نادرست حذف می‌شوند.
  • آستانه‌گذاری هیسترزیس: آستانه‌گذاری هیسترزیس برای شناسایی لبه‌های قوی و ضعیف به تصویر گرادیان اعمال می‌شود.

تشخیص لبه کاننی یک الگوریتم قدرتمند برای تشخیص لبه است که می‌تواند تصاویر لبه با کیفیت بالا تولید کند. با این حال، این روش ممکن است از نظر محاسباتی هزینه‌بر باشد.

# Import the necessary Libraries
import cv2
import numpy as np
import matplotlib.pyplot as plt
 
# Read image from disk.
img = cv2.imread('Ganesh.jpg')
# Convert BGR image to RGB
image_rgb = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)

# Apply Canny edge detection
edges = cv2.Canny(image= image_rgb, threshold1=100, threshold2=700)

# Create subplots
fig, axs = plt.subplots(1, 2, figsize=(7, 4))

# Plot the original image
axs[0].imshow(image_rgb)
axs[0].set_title('Original Image')

# Plot the blurred image
axs[1].imshow(edges)
axs[1].set_title('Image edges')

# Remove ticks from the subplots
for ax in axs:
    ax.set_xticks([])
    ax.set_yticks([])

# Display the subplots
plt.tight_layout()
plt.show()

خروجی:عکس برای پردازش تصویر با پایتون

تاری تصویر در پایتون

تاری تصویر تکنیکی است که جزئیات تصویر را با میانگین‌گیری از مقادیر پیکسل‌ها در اطراف کاهش می‌دهد. این کار می‌تواند برای کاهش نویز، نرم کردن لبه‌ها یا سخت‌تر کردن شناسایی تصویر انجام شود. در بسیاری از وظایف پردازش تصویر، تاری تصویر یک مرحله رایج پیش‌پردازش است. این تکنیک در بهینه‌سازی الگوریتم‌هایی مانند طبقه‌بندی تصویر، شناسایی اشیا و بخش‌بندی تصویر مفید است.

در OpenCV، روش‌های مختلفی برای تاری تصویر وجود دارد که هرکدام بین قدرت تاری و سرعت موازنه خاصی دارند.

برخی از رایج‌ترین تکنیک‌های تاری عبارتند از:

  • تاری گوسی: این یک تکنیک تاری محبوب است که از یک کرنل گوسی برای نرم کردن تصویر استفاده می‌کند.
  • تاری میانه: این تکنیک از میانه مقادیر پیکسل‌ها در یک ناحیه برای نرم کردن تصویر استفاده می‌کند.
  • تاری دوطرفه: این تکنیک لبه‌ها را حفظ کرده و در عین حال تصویر را تار می‌کند.
# Import the necessary Libraries
import cv2
import numpy as np
import matplotlib.pyplot as plt

# Load the image
image = cv2.imread('Ganesh.jpg')

# Convert BGR image to RGB
image_rgb = cv2.cvtColor(image, cv2.COLOR_BGR2RGB)

# Apply Gaussian blur
blurred = cv2.GaussianBlur(image, (3, 3), 0)

# Convert blurred image to RGB
blurred_rgb = cv2.cvtColor(blurred, cv2.COLOR_BGR2RGB)

# Create subplots
fig, axs = plt.subplots(1, 2, figsize=(7, 4))

# Plot the original image
axs[0].imshow(image_rgb)
axs[0].set_title('Original Image')

# Plot the blurred image
axs[1].imshow(blurred_rgb)
axs[1].set_title('Blurred Image')

# Remove ticks from the subplots
for ax in axs:
    ax.set_xticks([])
    ax.set_yticks([])

# Display the subplots
plt.tight_layout()
plt.show()

خروجی:عکس برای پردازش تصویر با پایتون

پردازش مورفولوژیکی تصویر با پایتون

پردازش مورفولوژیکی تصویر مجموعه‌ای از تکنیک‌های پردازش تصویر است که بر اساس هندسه اشیا در تصویر عمل می‌کند. این فرآیندها معمولاً برای حذف نویز، جدا کردن اشیا و شناسایی لبه‌ها در تصاویر استفاده می‌شوند.

دو عملیات مورفولوژیکی رایج عبارتند از:

  • توسعه (Dilation): این عملیات مرزهای اشیا در تصویر را گسترش می‌دهد.
  • فرسایش (Erosion): این عملیات مرزهای اشیا در تصویر را کوچک می‌کند.

فرایندهای مورفولوژیکی معمولاً در کنار دیگر روش‌های پردازش تصویر با پایتون مانند بخش‌بندی و تشخیص لبه استفاده می‌شوند.

# Import the necessary Libraries
import cv2
import numpy as np
import matplotlib.pyplot as plt

# Load the image
image = cv2.imread('Ganesh.jpg')

# Convert BGR image to gray
image_gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)

# Create a structuring element
kernel = np.ones((3, 3), np.uint8)

# Perform dilation
dilated = cv2.dilate(image_gray, kernel, iterations=2)

# Perform erosion
eroded = cv2.erode(image_gray, kernel, iterations=2)

# Perform opening (erosion followed by dilation)
opening = cv2.morphologyEx(image_gray, cv2.MORPH_OPEN, kernel)

# Perform closing (dilation followed by erosion)
closing = cv2.morphologyEx(image_gray, cv2.MORPH_CLOSE, kernel)

# Create subplots
fig, axs = plt.subplots(2, 2, figsize=(7, 7))

# Plot the Dilated Image
axs[0,0].imshow(dilated, cmap='Greys')
axs[0,0].set_title('Dilated Image')
axs[0,0].set_xticks([])
axs[0,0].set_yticks([])

# Plot the Eroded Image
axs[0,1].imshow(eroded, cmap='Greys')
axs[0,1].set_title('Eroded Image')
axs[0,1].set_xticks([])
axs[0,1].set_yticks([])

# Plot the opening (erosion followed by dilation)
axs[1,0].imshow(opening, cmap='Greys')
axs[1,0].set_title('Opening')
axs[1,0].set_xticks([])
axs[1,0].set_yticks([])

# Plot the closing (dilation followed by erosion)
axs[1,1].imshow(closing, cmap='Greys')
axs[1,1].set_title('Closing')
axs[1,1].set_xticks([])
axs[1,1].set_yticks([])

# Display the subplots
plt.tight_layout()
plt.show()

خروجی:عکس برای پردازش تصویر با پایتون

نتیجه گیری

پردازش تصویر با پایتون به دلیل کتابخانه‌های قدرتمند و متنوعی مانند OpenCV، Pillow و scikit-image به ابزاری بسیار کاربردی در تحلیل و پردازش تصاویر تبدیل شده است. این کتابخانه‌ها قابلیت انجام انواع عملیات پردازشی نظیر تغییر اندازه، فیلتر کردن، شناسایی لبه‌ها و تشخیص اشیا را فراهم می‌کنند. به‌ویژه OpenCV با ارائه مجموعه‌ای گسترده از ابزارها و توابع، یکی از محبوب‌ترین گزینه‌ها برای پروژه‌های بینایی کامپیوتری است. استفاده از این ابزارها در برنامه‌های مختلف از جمله طبقه‌بندی تصویر، تشخیص اشیا و پردازش ویدیو به کاربران این امکان را می‌دهد تا تصاویر را به شیوه‌ای کارآمد و دقیق پردازش کرده و نتایج مطلوبی بدست آورند.


سوالات متداول


پردازش تصویر در پایتون چگونه است؟

پردازش تصویر در پایتون از طریق کتابخانه‌هایی مانند OpenCV، PIL وPillow و scikit-image امکان‌پذیر است. این کتابخانه‌ها ابزارهای قدرتمندی برای انجام عملیات مختلف روی تصاویر فراهم می‌کنند و برای کاربردهای متنوعی همچون تشخیص اشیا، شناسایی الگو، پردازش و ویرایش تصاویر مورد استفاده قرار می‌گیرند.

پیش پردازش تصویر با پایتون چگونه است؟

برای پیش‌ پردازش تصویر با پایتون، می‌توان از کتابخانه‌هایی مانند OpenCV و scikit-image استفاده کرد. این کتابخانه‌ها ابزارهایی برای انجام کارهایی مانند تغییر اندازه و فیلتر کردن تصاویر فراهم می‌کنند.

معروف ترین کتابخانه پردازش تصویر در پایتون چیست؟

OpenCV یکی از معروف‌ترین و قدرتمندترین کتابخانه‌های پردازش تصویر با پایتون است که به طور گسترده برای برنامه‌های بینایی کامپیوتری استفاده می‌شود. این کتابخانه ابزارهای متنوعی برای انجام عملیات مختلف روی تصاویر، از جمله تغییر اندازه، فیلتر کردن، شناسایی لبه‌ها، و تشخیص اشیا فراهم می‌کند. OpenCV به دلیل کارایی بالا و انعطاف‌پذیری در پروژه‌های پردازش تصویر و بینایی کامپیوتری بسیار محبوب است.

میزان رضایتمندی
لطفاً میزان رضایت خودتان را از این مطلب با دادن امتیاز اعلام کنید.
[ امتیاز میانگین 0 از 0 نفر ]
اگر بازخوردی درباره این مطلب دارید یا پرسشی دارید که بدون پاسخ مانده است، آن را از طریق بخش نظرات مطرح کنید.
منابع و مراجع:
geeksforgeeks neptune

دیدگاه‌ خود را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

پیمایش به بالا