ספריית קוד פתוח C++ עבור עיבוד תמונה מקביל
API חינמי של C++ התומך במיכלי תמונה N-ממדיים כלליים, סט משופר של אלגוריתמים לעיבוד תמונה וכן הלאה.
Video++ הוא ממשק API לעריכת תמונות ב-C++ רב-שרשורים רב פלטפורמות המאפשר למפתחי תוכנה לעבוד עם תמונות וקובצי וידאו בתוך יישומי C++ שלהם. הספרייה קלה מאוד לטיפול והיא פותחה תוך שימוש בתכונות החדשות של C++11/C++14. הרעיון המרכזי מאחורי Video++ הוא לעצב מחדש מאפס מסגרת לעיבוד תמונה תוך שימוש בתקן החדש C++.
תכונה נהדרת אחת של ספריית Video++ היא ההגדרה הקלה של גרעיני עיבוד תמונה מקבילים שפועלים עד פי 32 מהר יותר מהגרסה הנאיבית הלא מותאמת. הספרייה כללה מספר מאפיינים חשובים כגון מיכלי תמונה גנריים N-ממדיים, קבוצה משופרת של אלגוריתמים לעיבוד תמונה, צבע מילוי, ניהול זיכרון טוב יותר, גבול מילוי, שימוש בתת-תמונות תלת-ממד ועוד רבות.
הספרייה סיפקה תכונה שימושית לגישה למיכלי התמונה המציעים גישה למאגר הפיקסלים ולמידע נוסף שימושי לעיבוד התמונה. זה גם מספק יכולת פעולה הדדית ל-openCV ותומך בהמרות מפורשות לסוגי תמונות OpenCV וממנו.
תחילת העבודה עם וידאו++
אנא השתמש בפקודה הבאה להתקנה מלאה. ה-Video++ הוא לכותרת בלבד ולכן כדי לגשת לכל התכונות הדרושות, עליך לכלול את הכותרת vpp.h. אתה גם צריך לקבל Eigen3 ו-Boost במערכת שלך לפני התקנת Video++.
התקן וידאו++ באמצעות פקודת git
git clone https://github.com/matt-42/vpp.git
cd vpp
./install.sh your_install_prefix # Install iod and vpp in a given prefix
עיבוד תמונה מקביל באמצעות ספריית C++
ספריית הקוד הפתוח Video++ מאפשרת למפתחי תוכנה להגדיר ליבות לעיבוד תמונות מקבילות באמצעות פקודות C++. הדבר הגדול הוא שהגרעינים יכולים לפעול פי 32 מהר יותר מאלה רגילים. זה פיזר באותה מידה את ביצוע הגרעינים על כל ליבות ה-CPU הזמינות שמריצות מספר שרשורים הפועלים על מספר ליבות. הוא תומך בתכונות כמו מילוי גבולות בערך, מילוי מראה גבול, הגדרת היישור, גישה לפיקסלים לתמונה, החלת מסננים על תמונות וכן הלאה.
הוספת תמונה באמצעות C++
ספריית הקוד הפתוח Video++ סיפקה פונקציונליות מלאה להוספת תמונות באמצעות מסנן פיקסלים. הוא מציע קבוצה של אובייקטים ושגרות גנריות המאפשרות כתיבת יישומים יעילים של מסננים פשוטים במהירות. מסנני עיבוד תמונה רבים הם פונקציות פשוטות הממלאות פיקסלים בערכים מחושבים, ובכך אין תלות בין חישובים לגבי פיקסלים שונים.
הוספת תמונה 2D באמצעות C++
int main()
{
using namespace vpp;
image2d img1(make_box2d(100, 200), _border = 3);
image2d img2({100, 200});
assert(&img1(0,0) == &img1[0][0]);
assert(&img1(0,0) == &(*img1.begin()));
assert(img1.domain() == img2.domain());
assert(img1.nrows() == 100);
assert(img1.ncols() == 200);
{
image2d img(make_box2d(5, 5), _border = 1);
assert(&img(0,0) == img.address_of(vint2(0,0)));
assert(&img(4,0) == img.address_of(vint2(4,0)));
auto s1 = img.subimage(img.domain());
assert(&s1(0,0) == s1.address_of(vint2(0,0)));
for (auto p : img.domain())
assert(img(p) == img[p[0]][p[1]]);
for (auto p : img.domain())
assert(img(p) == s1[p[0]][p[1]]);
}
}