יצירת סקיצה יפה דורשת הרבה זמן ומאמץ. למרבה המזל, התכנות התפתחה כך שתוכל כעת לשנות תמונות בקלות וליצור עיצובים יפים. טכניקה מרשימה אחת שתוכל לבצע היא המרת תמונה לסקיצה דיגיטלית.
בעוד שרטוט מכאני לא ייראה בדיוק כמו ציור העיפרון שלך, הפלט עדיין שווה ניסוי. למד כיצד לתכנת אפליקציה כזו באמצעות מודול OpenCV בשפת Python הידידותית במיוחד.
מודול OpenCV
OpenCV היא ספריית קוד פתוח שפותחה ומתוחזקת על ידי אינטל של שיטות ראייה ממוחשבת המשמשות לעיבוד תמונה וראייה ממוחשבת. זה מקל על המשתמשים ליצור יישומים מותאמים, ליצור אינטראקציה עם תמונות וסרטונים בזמן אמת ולבחור את האלגוריתם האידיאלי לצרכים שלהם.
כמה מהיישומים הפופולריים של OpenCV כולל זיהוי פנים, מעקב פנים אוטומטי בצילום, מסנני מדיה חברתית, זיהוי לוחית רישוי לרכבוניטור במעגל סגור. כדי להשתמש במודול OpenCV ב- Python, פתח את הטרמינל שלך והקלד את הפקודה הבאה:
pip להתקין opencv-python
כיצד להמיר כל תמונה לסקיצה באמצעות Python
כדי להמיר את התמונה האהובה עליך לסקיצה דיגיטלית, התחל בהצבתה באותה תיקיה כמו תוכנית Python חדשה, להפניה קלה. לאחר מכן התחל לבנות את התוכנית שלך באמצעות השלבים הבאים.
קוד דוגמה זה זמין ב-a מאגר GitHub והוא בחינם עבורך לשימוש תחת רישיון MIT.
הצעד הראשון הוא לייבא את מודול OpenCV לסביבה שלך. ברגע ש-OpenCV זמין, אתה יכול להשתמש בפונקציונליות שלו כדי לבצע משימות שונות. העבר את הנתיב של קובץ התמונה שלך לתוך imread() פונקציה כדי לטעון אותו. אחסן את התמונה שלך במשתנה - נקרא תמונה 1 כאן - לעיון עתידי.
אחסן את כותרת החלון במשתנה בשם window_name. זה יהיה שימושי כאשר תבחר להציג את התמונה באמצעות imshow() פוּנקצִיָה. פונקציה זו דורשת שני פרמטרים: הכותרת והתמונה שברצונך להציג.
יְבוּא cv2
image1 = cv2.imread('image.jpg')
window_name = 'תמונה בפועל'
cv2.imshow (window_name, image1)
ברגע שיש לך את התמונה הרצויה, עליך לבצע חמש פעולות כדי להפוך אותה לסקיצה. ראשית, המר את תמונת הצבע לגווני אפור. אתה יכול לעשות זאת עם cvtColor() פוּנקצִיָה. פונקציה זו לוקחת את התמונה שאת הצבעים שלה אתה רוצה לשנות וקוד המרה כגון COLOR_BGR2GRAY.
grey_img = cv2.cvtColor (תמונה1, cv2.COLOR_BGR2GRAY)
ברגע שיש לך תמונה בגווני אפור, הפוך את הצבעים שלה. בשלב זה, עליך להבין כיצד מחשב יוצר תמונה. תמונה מורכבת מפיקסלים זעירים רבים בעלי עוצמות משתנות. בתמונה צבעונית, כל פיקסל מכיל רכיבים אדומים, ירוקים וכחולים, כל אחד בעוצמה שמשתנה בין 0 ל-255.
בתמונה בגווני אפור יש רק גוונים של אפור, כך שעוצמת הפיקסל משתנה בין 0 ל-1. כדי להפוך את עוצמות הפיקסלים של תמונה זו, העבר את התמונה בגווני אפור ל- bitwise_not() פוּנקצִיָה.
כפי שהשם מרמז, פונקציה זו הופכת את הערך של כל פיקסל למקבילה המשלימה שלו. כל הפיקסלים שגדולים מ-0 מוגדרים ל-0, וכל הפיקסלים השווים ל-0 מוגדרים ל-255.
invert = cv2.bitwise_not (grey_img)
לאחר היפוך עוצמות הפיקסלים, ניתן להחליק את התמונה בעזרת Gaussian Blur. תהליך הטשטוש גאוס עושה שימוש במסנן גאוסי. מסנן גאוס הוא מסנן נמוך המאפשר רק לעבור תדרים נמוכים, מסיר את רכיב התדר הגבוה של אות או תמונה.
OpenCV's טישטוש גאוסיאני() הפונקציה מקבלת ארבעה פרמטרים. אלו הם אובייקט מטריצה שמתפקד כתמונת המקור, ה-ksize (גודל הליבה) ו-sigmaX (סטיית התקן של הליבה גאוסית).
נניח שיש לך צילום פיזי ביד. אם תרצו לטשטש אותו, תוכלו למרוח עליו חתיכות שעווה או נייר פרגמנט. אתה יכול לדמיין את הגרעין כחלק הנייר השקוף הזה. מבחינה דיגיטלית, זה קורה קצת אחרת. כדי לטשטש, לחדד ולהחיל אפקטים אחרים על תמונה דיגיטלית, אתה מכפיל מטריצה בעוצמת הפיקסלים של התמונה.
ה-ksize הוא תמיד מספר אי-זוגי חיובי. ככל שאתה מגדיל את גודל הגרעין, הטשטוש גדל. כדי להבין את SigmaX נניח שאתה מורח שעווה על נייר. בעת החלת שעווה, הנייר הופך לשקוף אחיד. באופן דומה, עליך לשמור את ערכי הקרנל קרוב לנקודה מסוימת (הממוצע). ערך sigmaX מגדיר את ההבדל בין הממוצע לערכים אחרים של הפיקסלים בתמונה.
העבר את התמונה ההפוכה, גודל הגרעין כ- (21, 21) ו-0 סטיית תקן לפונקציית הטשטוש של גאוס:
blur = cv2.GaussianBlur (היפוך, (21, 21), 0)
העבר את התמונה המטושטשת לפונקציה bitwise_not() שוב כדי להפוך אותה:
invertedblur = cv2.bitwise_not (טשטוש)
לבסוף, השתמש ב- לחלק() פונקציה ולבצע חלוקה לכל אלמנט של מערך התמונות בגווני אפור ומערך התמונות הטשטוש ההפוך בקנה מידה של 256.
sketch = cv2.divide (grey_img, invertedblur, scale=256.0)
בעצם הפונקציה מבצעת את הפעולה הבאה:
defלחלק(grey_img, b, invertedblur=256.0):
לַחֲזוֹר (grey_img * scale) / טשטוש הפוך
אחסן את התוצאה במשתנה בשם sketch. כדי לשמור את התמונה הסופית, העבר שם לקובץ הפלט שלך ותמונת הסקיצה ל- imwrite() פוּנקצִיָה. כדי לאמת את זה, אתה יכול להשתמש בפונקציה imread() כדי לטעון את תמונת הסקיצה השמורה, לתת כותרת לחלון ולהציג אותה באמצעות הפונקציה imshow().
להשתמש ב waitkey() פעל על ידי העברת 0 כדי להציג את חלון התמונה המקורית ואת חלון הסקיצה שנוצר עד שתלחץ על מקש כלשהו.
cv2.imwrite("sketch.jpeg", סקיצה)
image = cv2.imread("sketch.jpeg")
window_name ='סקיצה תמונה'
cv2.imshow (שם_חלון, תמונה)
cv2.waitKey(0)
חבר את כל הקוד והתוכנית שלך מוכנה.
פלט לדוגמה של המרת תמונה לסקיצה באמצעות תוכנית Python זו
אתה יכול לבחור תמונת נוף יפה ולהפעיל אותה דרך התוכנית כדי ליצור את הסקיצה הדיגיטלית המהממת הזו.
על תמונת דיוקן, התוכנית מייצרת את הסקיצה הדיגיטלית הבאה.
אתה יכול להתנסות עם הפרמטרים של הפונקציה לפי טעמך כדי ליצור את הסקיצה הדיגיטלית הרצויה.
עיבוד תמונה וראייה ממוחשבת
עיבוד תמונה וראייה ממוחשבת הם שני תחומי טכנולוגיה הקשורים זה לזה. שניהם כרוכים בשינוי תמונות דיגיטליות כדי להגיע לתוצאות הרצויות. עיבוד תמונה מתמקד בשיפור תמונה, בעוד שראייה ממוחשבת מחפשת למצוא דפוסים ואובייקטים בתוך תמונה כדי להבין אותה.
Scikit-image היא ספריית Python נוספת המספקת מגוון רחב של פונקציות עיבוד תמונה. יש לו כמה מודולים מהודרים מראש, מסננים, שכבות, טרנספורמציות ועוד. אם אתה מחפש מודול לשימוש עבור מודלים של למידה עמוקה כגון CNN ו-RNN, אולי תרצה לחקור את Torchvision.