תכנות וזיהוי/קלט תמונות

מתוך ויקיספר, אוסף הספרים והמדריכים החופשי

מקור התמונות בתוכנה[עריכה]

כפתורי קלט תמונות

יש כמה מקורות :

פתיחת תמונה מקובץ הנמצא באחת התיקיות[עריכה]

לשם חיפוש בתיקיות את הקובץ המתאים, יש שימוש בפונקציה OpenFile

כמו בדוגמה : Dev-Cpp\Examples\FileEditor

הבאה עם המהדר של שפת CPP באתר: http://www.bloodshed.net/devcpp.html

העברת התמונה להצגה בחלון דומה לדוגמה הראשונה בספר.

אבל כאן פותחים קובץ מתיקייה כמו בדוגמה לפני כמה פרקים.

תפיסת תמונה של אחד מהחלונות[עריכה]

לשם תפיסה של תמונה מאחד החלונות, יש שימוש בדוגמה של חברת מיקרוסופט :

How To Get Window's Class Name And Other Window Internet Explorer-Attributes

מהאתר : http://support.microsoft.com

אבל זה לא מספיק כי צריך להתאים את התמונה לחלון שלנו. לשם התאמת תוכן גרפי

של שני חלונות ממקורות שונים יש שימוש בסוף הדוגמה של Mike D Sutton

microsoft.public.vb.general.discussion "Select polygon on EMF on MouseOver

תפיסת כל תמונת שולחן העבודה כולל החלונות שבתוכו[עריכה]

התוכנית PC לתפיסת המסך היא משנית לעומת התוכנית הראשית OC
מקרא לצלמיות של שני סוגי קבצים

לשם כך יש שימוש בדוגמה מהפרקים הקודמים

"שמירה מהירה של צבעי החלון במערך".

אבל זה לא מספיק, כי כשנמצאים בתוך חלון, התוכנה מכירה את החלון ולא את החלונות סביבו,

ואפילו ממזערים את החלון, התוכנה זוכרת את החלון שהפעיל אותה בזמן שהוא היה פתוח,

ומתעלמת משולחן העבודה.

כדי לפתור את הבעיה בתיקיית הקבצים

נמצאת תוכנית קטנה בשם Pc (בנוסף על התוכנית הראשית oc).

כשמפעילים אותה לא נפתח חלון, ולכן היא מצליחה לתפוס את שולחן העבודה,

היא שומרת את התמונה שלו כקובץ בתיקיית הקבצים,

כך שמהחלון אפשר לפתוח קובץ הנמצא בתיקיית הקבצים של תמונת שולחן העבודה.

שרטוט תמונה בעזרת עכבר[עריכה]

דוגמה פשוטה לשרטוט עם עכבר בחלון: GNAT\bindings\Win32Ada\samples\connect

באה עם המהדר של שפת תכנות עדה באתר : www.usafa.af.mil/dfcs/bios/mcc_html/adagide.html

בתוכנית הזאת כל קו עקום מתמלא . כדי שיוכלו לשרטט בתוכנית שלנו קווים מעוצבים כמו בעט נוצה, המשתמש

מצייר סדרת קוים עקומים שמתמלאים אוטומטית .

בחירת חלק מתמונה[עריכה]

כדי לבחור חלק מהתמונה , משתמשים בעכבר לסמן לפחות שתי נקודות בפינות המלבן

(בקצות אחד מאלכסוני המלבן) הקובע את השטח הנבחר, ומקלידים או בתפריט החלון : צייר -> "סיים לשרטט"

או בחלון הפקדים בכפתור "סיים לשרטט" , יש לבחירה מסוג זה כמה חסרונות :

  1. מה שנבחר כולל את הסימון וזה לפעמים מקלקל את התמונה והורס את הזיהוי.
  2. אי אפשר לבחור אות שנכנסת לתוך אזור של אות אחרת, בלי חלק מאות אחרת.

בצייר החלוני מכיל סוג בחירה הפותרת את שתי הבעיות הללו היא נקראת "בחירה חופשית".

בבחירה חופשית משרטטים קו עקום סביב האות (או העצם) ברגע שהצורה נסגרת סביב

העצם נבחר רק פנים הקו בלי שנשארים סימני בחירה בתמונה.

לא מצאתי באינטרנט קוד מקור ל"בחירה חופשית" אבל אני מניח שכך מתכנתים אותה :

  • הצורה העקומה שהמשתמש משרטט נשמרת על תמונת מפת סיביות שקופה הנמצאת כשכבה נוספת מעל התמונה בחלון.
  • כשהצורה נסגרת היא מתמלאת כמו בדוגמה בעדה. מורדת מהחלון ונשמרת בזיכרון.
  • ואז בסדרה של פעולות בפונקציה BitBlt (המוזכרת בפרקים הקודמים) על שתי התמונות :
  1. התמונה בחלון.
  2. השרטוט המלא בזיכרון.

נוצרת תמונה חדשה מלבנית המכילה בתוכה את העצם הנבחר ורקע שחור או לבן. לשם כך משתמשים לסרוגין בכמה משתנים (דגלים) בפונקציה BitBlt :

סודר הדגל תפקידו הערה
1 SRCCOPY להעתיק את התמונה הראשונה לתוך השנייה וליצור מזה תמונה חדשה
2 SRCINVERT להפוך את צבעי התמונה בתוכנה בתפריט הראשי יש אפשרות להפוך את צבע החלון
3 SRCPAINT לעשות פעולת או לוגית בין שתי התמונות בתמונה אחת לבן (1 לוגי) ותמונה שנייה צבע אחר, הצבע האחר נשאר
4 SRCAND לעשות פעולת וגם לוגית בין שתי התמונות בתמונה אחת שחור (0 לוגי) ותמונה אחרת צבע אחר , הצבע השחור נשאר

לשם כך משלבים שלוש תוכנות :

  1. תמונות מפת סיביות שקופות של THE FORGER .
  2. שרטוט בעזרת עכבר מהדוגמה של המהדר של עדה.
  3. אנימציה חלונית מהדוגמה שבאה עם המהדר של CPP , יישום של תמונה שחלקה שקופה הנעה על רקע.

המיקום באינטרנט לשלוש התוכנות :

  1. תמונות שקופות - באתר WINPROG : בפרק : Transparent Bitmaps
  2. שרטוט בעדה - נמצא באתר המוזכר בסעיף הקודם : שרטוט תמונה בעזרת עכבר.
  3. Dev-Cpp\Examples\WinAnim - המהדר נמצא באתר המוזכר לפני כמה סעיפים.

עיבוד התמונה בתוך חלון גרפי[עריכה]

אומנם התוכנה לא הגיעה לרמה של הצייר החלוני בעיבוד התמונה, בכל זאת יש בה כמה אפשרויות :

  1. מתיחה וכיווץ תמונה.
  2. גרירת תמונה על תמונת רקע.
  3. הוספת תמונה על תמונה, כשמוסיפים תמונה שלישית הראשונות הופכות לרקע.
  4. היפוך צבע התמונה.
  5. מתיחה וכיווץ תמונה ביחס לשורה , כך אפשר ליצור תמונה הנמצאת בתוך מרכז מלבן ולאו דווקא נוגעת בשוליו.

רוב האפשרויות מוסברות בסעיפים הקודמים, בהמשך ארחיב על מתיחה וכיווץ תמונה ביחס לשורה :

מתיחה וכיווץ תמונה ביחס לשורה[עריכה]

התאמת אות לגודל השורה

במילה "יון" לפי שיטות הזיהוי הצורני (בתוכם שיטת באכ"ך המוסברת בפרקים הקודמים)

אי אפשר להבחין בין האותיות. משתי סיבות :

  1. מה שמאפיין את האותיות הוא המיקום שלהם ביחס לשורה (קוד למציאת מיקום האות ביחס לשורה יש בתוכנת GOCR באינטרנט).
  2. בשיטות אלה בכל זיהוי מקיפים את האות במלבן ומותחים את המלבן לאותו הגודל, ואז שלושת האותיות הללו מקבלות לאותה צורה.

כדי לפתור את הבעיה שומרים את תמונת כל האותיות (או התמונות) כתמונות בגודל שונה ביחס למלבן קטן בגודל קבוע ,

הנמצא בתוך מלבן גדול יותר. חלק יהיו במרכז המלבן הקטן, רובם יחסמו על ידו (יגעו בדפנותיו) , חלק יהיו יותר גדולים ממנו,

וחלק יחסמו על ידי המלבן הגדול. בתמונה רואים איך בתוכנה מותחים ומזיזים את האות - 'ש' בכתב כך שתתאים למלבן הקטן ,

המלבנים מסביב המלבן הקטן מציינים את המיקום של מעל השורה, מתחת השורה , אות הגולשת אחורה ואות הגולשת קדימה.

בתחתית התמונה מוצגים הלחצנים המתאימים מחלון הפקדים : כפתורי התאמת גודל , "התחל" ו"סיים" .

כדי להתאים אות בתוכנה:

  • קודם מצירים את האות ושומרים אותה, ומציגים אותה בחלון.
  • אחר כך מפעילים את "התחל" ואז מופיע בחלון הגרפי השרטוט האפור של מלבן בתוך מלבנים.
  • בהמשך גוררים את האות מעל המיקום המתאים במלבנים האפורים.
  • בהמשך מותחים אותה אות מכווצים אותה.
  • ולבסוף מפעילים את "סיים".

בהמשך אפשר לטעון את האות כאחד המופעים בתמונת בסיס הנתונים של התמונות כמו שמוזכר בפרקים הקודמים.

האם שיטת מתיחה וכיווץ תמונה ביחס לשורה פותרת את הבעיה?[עריכה]

השיטה פותרת את בעיית ההבחנה בין אותיות כמו במילה "יון", אבל הורסת את הזיהוי הצורני (ביחוד את שיטת באכ"ך) מכמה סיבות:

  1. מפני שרוב האותיות מוקטנות ,רוב הקווים המחברים שתי נקודות במלבן( בתוכו האות נמצאת) לא חותכים את האות.
  2. אי אפשר לדעת כמה פעמים נחתכה האות במרכז המלבן החוסם את האות , וכמה פעמים בשוליו.

הצעה אחרת למציאת תכונות בזיהוי האות ביחס לשורה[עריכה]

ליצור שתי מערכות לזיהוי :

  1. הזיהוי הצורני בשיטת באכ"ך כמו שמוזכר בפרקים הקודמים שמכיל בסיס נתוני תמונות יחד עם קבצי טקסט.
  2. בסיס נתונים נוסף של תמונות יחד עם מערכת קבצי טקסט למציאת זיהוי האות ביחס לשורה .

הבסיס הנתונים החדש לא יתבסס על ריבוי התכונות של שיטת באכ"ך אלא על תכונות מועטות אחרות למשל :

  1. גובה האות ביס לגובה השורה.
  2. רוחב האות ביחס לגובה השורה.
  3. קווים מאוזנים הבודקים אם האות נחתכה מעל השורה בתוך השורה ומתחת השורה.