কম্পিউটার টিউটোরিয়াল

সি++-এ ভিডিও স্টিচিং (Video Stitching)


মান লেযিয়ে একটি খেলার ইভেন্ট T সেকেন্ড ধরে চলেছে এবং এর ভিডিও ক্লিপের একটি সিরিজ আছে। এই ক্লিপগুলো একে অপরের সাথে ওভারল্যাপ করতে পারে এবং বিভিন্ন দৈর্ঘ্যের হতে পারে। প্রতিটি ভিডিও ক্লিপ clips[i] একটি ইন্টারভাল - এটি clips[i][0] সময়ে শুরু হয় এবং clips[i][1] সময়ে শেষ হয়। আমরা এই ক্লিপগুলোকে ফ্রিলি সেগমেন্টে কাটতে পারি - আমাদের সমগ্র ইভেন্ট ([0, T]) কভার করার জন্য ন্যূনতম কতগুলো ক্লিপ লাগবে তা বের করতে হবে। যদি অসম্ভব হয়, -1 রিটার্ন করুন। ইনপুট [[0,2],[4,6],[8,10],[1,9],[1,5],[5,9]] এবং T = 10 হলে আউটপুট হবে ৩, কারণ আমরা [0,2], [8,10] এবং [1,9] ক্লিপগুলো নিতে পারি, মোট ৩টি। এরপর [1,9]-কে [1,2] + [2,8] + [8,9] সেগমেন্টে কাটলে পাব [0,2] + [2,8] + [8,10] যা [0, 10] কভার করে।

এটি সমাধান করার জন্য আমরা নিচের ধাপগুলো অনুসরণ করব -

  • T+1 আকারের একটি v অ্যারে তৈরি করুন, -1 দিয়ে পূরণ করুন

  • n := clips.size()

  • i = 0 থেকে n-1 পর্যন্ত লুপ চালান

    • যদি clips[i][0] > T হয়, পরবর্তী ইটারেশনে যান

    • v[clips[i][0]] := max(v[clips[i][0]], min(clips[i][1], T))

  • curr := v[0]

  • যদি v[0] == -1 হয়, -1 রিটার্ন করুন

  • i := 1, ret := 1, next := 0

  • যখন curr < T এবং i <= n

    • যখন i <= curr

      • next := max(next, v[i])

      • i++ করুন

    • যদি next == curr এবং next == -1 হয়, -1 রিটার্ন করুন

    • curr := next, ret++

  • যদি curr >= T হয় ret রিটার্ন করুন, অন্যথায় -1

নিচের বাস্তবায়নটি দেখে আরও ভালো বুঝতে পারবেন -

উদাহরণ

#include <bits/stdc++.h> using namespace std; class Solution {    public:    int videoStitching(vector<vector<int>>& clips, int T) {       vector <int> v(T + 1, -1);       int n = clips.size();       for(int i = 0; i < n; i++){          if(clips[i][0] > T)continue;          v[clips[i][0]] = max(v[clips[i][0]], min(clips[i][1],          T));       }       int curr = v[0];       if(v[0] == -1)return -1;       int i = 1;       int ret = 1;       int next = 0;       while(curr < T && i <= n){          while(i <= curr){             next = max(next, v[i]);             i++;          }          if(next == curr || next == -1) return -1;          curr = next;          ret++;       }       return curr >= T? ret : -1;    } }; main(){    vector<vector<int>> v1 = {{0,2},{4,6},{8,10},{1,9},{1,5},{5,9}};    Solution ob;    cout << (ob.videoStitching(v1, 10)); }

ইনপুট

[[0,2],[4,6],[8,10],[1,9],[1,5],[5,9]] 10

আউটপুট

3

  1. Frugal সংখ্যা চেক করা (C++)

  2. C++ দিয়ে পেন্টাটপ (Pentatope) সংখ্যা বের করা

  3. OpenCV-এ C++ ব্যবহার করে ভিডিও রোটেট করা

  4. OpenCV-এ C++ ব্যবহার করে बीती हुई সময় গণনা করা