عکس‌های خود را با استفاده از کد به طرح‌های هنری تبدیل کنید

تبدیل عکس به طرح مدادی با کدنویسی
تبدیل عکس به طرح مدادی با کدنویسی
منتشر شده در towardsdatascience به تاریخ ۲۵می ۲۰۲۱
لینک منبع Turn Your Photos into Artistic Sketches with Code

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

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

بدون از دست دادن وقت، بیایید شروع کنیم!

فهرست مطالب:

  • پایتون
  • آغاز کار
  • مرحله ۱-تصویر را تعریف کنید
  • مرحله ۲-پیش‌پردازش تصویر
  • مرحله ۳-رنگ کردن شبکه
  • مرحله نهایی-صدور نتیجه
تبدیل عکس به طرح مدادی با کدنویسی
تبدیل عکس به طرح مدادی با کدنویسی

پایتون

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

آغاز کار

در این پروژه، ما از دو کتابخانه پایتون استفاده خواهیم کرد. کتابخانه اصلی OpenCV است که یک پروژه شناخته‌شده بصری کامپیوتر است. و دومین کتابخانه‌ای که به آن نیاز داریم PIL است، که یک کتابخانه پردازش تصویر است.

کتابخانه OpenCV (باز کردن مجدد صفحه نمایش رایانه)

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

مرجع: https://opencv.org

نصب کتابخانه‌ها

ما می‌توانیم کتابخانه‌ها را با استفاده از pip، یک مدیر بسته / کتابخانه پایتون، نصب کنیم. پس از تکمیل نصب، می‌توانیم آن‌ها را وارد فایل پروژه خود کنیم.

OpenCV به عنوان «opencv-pyton» و PIL به عنوان «pillow» نصب شده‌است.

pip install opencv-python pillow

وارد کردن کتابخانه‌ها

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

import cv2

from PIL import Image

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

مرحله ۱- تصویر را تعریف کنید

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

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

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

اول، اجازه دهید اندازه اصلی تصویر را بررسی کنیم.

image = Image.open('portrait.jpg')

print(image.size)#Result

(4000, 6000)

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

resized_image = image.resize((800, 1200))

resized_image.save('resized_image.jpg')print(resized_image.size)#Result

(800, 1200)

خواندن تصویر

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

img = cv2.imread(‘resized_image.jpg’)

مرحله ۲-پیش‌پردازش تصویر

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

تبدیل به مقیاس خاکستری

در اینجا مستندات رسمی برای روش cvtColor آورده شده‌است.

grayed = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
تصویر خاکستری شده
تصویر خاکستری شده

معکوس کردن پیکسل ها

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

inverted = cv2.bitwise_not(grayed)
معکوس شده
معکوس شده

اضافه کردن تاری

در اینجا مستندات رسمی روش GaussianBlur آورده شده‌است. GaussianBlur یک تصویر را با استفاده از یک فیلتر Gaussian محو می‌کند. این کار تاثیر طرح کلی را به کار هنری نهایی می‌دهد.

blurred = cv2.GaussianBlur(inverted, (19, 19), sigmaX=0, sigmaY=0)
تار شده
تار شده

مرحله ۳-محو کردن شبکه

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

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

def blend(x, y):

    return cv2.divide(x, 255 - y, scale=256)

حال، بیایید با عبور از تصاویری که می‌خواهیم ترکیب شوندذ، عملکرد را فراخوانی کنیم.

final_result = blend(grayed, blurred)

مرحله نهایی-صدور نتیجه

کار ما تقریبا تمام شده است!

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

cv2.imwrite(&quotmy_artwork.jpg&quot, final_result)

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

نتیجه

نتیجه نهایی
نتیجه نهایی

نتیجه‌گیری

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

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

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