Бібліотека C++ з відкритим кодом для паралельної обробки зображень 

Безкоштовний C++ API, який підтримує загальні контейнери N-вимірних зображень, розширений набір алгоритмів обробки зображень тощо.

Video++ — це потужний багатопоточний і кросплатформний API для редагування зображень C++, який дозволяє розробникам програмного забезпечення працювати із зображеннями та відеофайлами у власних програмах C++. Бібліотека дуже проста у використанні та розроблена з використанням нових можливостей C++11/C++14. Основна ідея Video++ полягає в тому, щоб переробити з нуля структуру обробки зображень, використовуючи переваги нового стандарту C++.

Однією з чудових особливостей бібліотеки Video++ є легке визначення ядер паралельної обробки зображень, які працюють у 32 рази швидше, ніж наївна неоптимізована версія. Бібліотека включає кілька важливих функцій, таких як загальні контейнери N-вимірних зображень, розширений набір алгоритмів обробки зображень, колір заливки, краще керування пам’яттю, межа заповнення, використання 3D-зображень та багато іншого.

Бібліотека надала корисну функцію для доступу до контейнерів зображень, які пропонують доступ до піксельного буфера та іншої інформації, корисної для обробки зображення. Він також забезпечує взаємодію з openCV і підтримує явні перетворення до та з типів зображень OpenCV.

Previous Next

Початок роботи з Video++

Будь ласка, скористайтеся наступною командою для повного встановлення. Video++ містить лише заголовок, тому для доступу до всіх необхідних функцій необхідно включити заголовок vpp.h. Вам також потрібно отримати Eigen3 і Boost у вашій системі перед встановленням Video++.

Встановіть 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 рази швидше, ніж звичайні. Він рівномірно розподіляє виконання ядер на всі доступні ядра ЦП, які виконують кілька потоків, що працюють на кількох ядрах. Він підтримує такі функції, як заповнення меж значенням, заповнення дзеркала рамки, налаштування вирівнювання, доступ до пікселів зображення, застосування фільтрів до зображень тощо.

Додавання зображень через 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]]);
  }
}
 Українська