Category: Zaawansowanie Programowanie w Multimediach

  • Ikona Lab

    Ikona do 2 laboratorium
    icon1

  • Aplikacja demonstrująca wczyt i zapis obrazów

    Załaczony program pokazuje podstawy odczytywania obrazów z pliku i zapisywania obrazów do pliku. Program nakłada na obraz logo wczytane z pliku, oraz umozliwia zapisanie do pliku wynikowego obrazu z kamery z nałożonyn logo.

    Projekt przygotowany pod Visual Studio 2012, 2010, 2008 i 2005.
    SaveAndLoadFiles.rar

  • Prosta aplikacja do śledzenia obiektu

    Załaczony program pokazuje podstawy śledzenia obkietu o wybranym kolorze. Pierw należy dokonać kalibracji systemu. Do kamery pokazujemy obiekt o charakterystycznym kolorze i umieszczamy go wewnątrz czerwonej ramki. Przycisk Get Frame powoduje pobranie profilu koloru obiektu. Na tej podstawie tworzony jest histogram kolorów obiektu do wykrycia. Czynność powtarzamy kilka razu w różnych warunkach oświetleniowych i umieszczając obiekt pod różnymi kątami. Następnie możemy przejśc do trybu detekcji. Wszelkie obiektu widocze przez kamerę o profilu kolorów uprzednio zarejestrowanym (w trybie kalibracji) zoastaną zaznaczone na czerwono. Zachęcam do modyfikacji załączonej aplikacji. Np można stworzyć optyczą myszkę która ruchy wykrytych obiektów będzie przekładac na ruchy myszy w komputerze.

    Projekt przygotowany pod Visual Studio 2012.
    SimpleTracker.rar
    Uaktualniony projekt przygotowany pod Visual Studio 2012, 2010, 2008 i 2005.
    SimpleTrackerv2.rar

  • Przykład programu do pobierania obrazu z kamery


    Załaczony program pokazuje podstawy przetwarzania obrazu. Aplikacja demonstruje sposób pobierania obrazu z kamery, jego przetwarzania i wyświetlania na okienku aplikacji.

    Projekt przygotowany pod Visual Studio 2012.
    CamImageProcess.rar

  • Oceny z Egzaminu ZPwM

    Numer indeksu Ocena
    83413
    83468 4,0
    84423 3,0
    93784
    93786 5,0
    93796 4,0
    93797 4,5
    93804 4,0
    93816 5,0
    93830 4,5
    93842
    93877
    93879 5,0
    93894 4,5
    93901 3,5
    93914 5,0
    93934 4,0
    93938 3,0
    93940 4,0
    93949
    93955 5,0
    93960 5,0
    93961 5,0
  • Techniki SSE i AVX

    Poniżej znajduje się kod programu który umożliwia porównanie wydajności obliczeń z wykorzystaniem instukcji SIMD zawartych w rozszerzeniach SSE i nowszym AVX. Wykorzystanie techniki AVX wymaga środowiska Visual Studio 2010 i procesora serii Core i3 i5 i7 oznaczego 4 cyfrowym numerem np Core i3 2100. Rozkazy serii SSE dostępne są we wszystkich nowoczenych procesorach.

    #include <windows.h>
    #include <stdio.h>
    #include <math.h>
    
    #include <emmintrin.h>
    #include <immintrin.h>
    #include <intrin.h>
    
    int ops_scalar (float* a, float* b, float* c, float* d, int N)
    {
      for(int i=0; i<N; i++)
      {
        d[i] = a[i]*b[i] + sqrt(c[i]);
      }
      return 0;
    }
    
    int ops_SSE (float* a, float* b, float* c, float* d, int N)
    {
      for(int i=0; i<N; i+=4)
      {
        __m128 A = _mm_load_ps(&(a[i])); //Załadowanie 4 float
        __m128 B = _mm_load_ps(&(b[i]));
        __m128 C = _mm_load_ps(&(c[i]));
    
        __m128 mul  = _mm_mul_ps(A, B); //A*B
        __m128 sqrt = _mm_sqrt_ps(C); //Sqrt(C)
        
        __m128 sum  = _mm_add_ps(mul, sqrt); //A*B+Sqrt(C)
    
        _mm_store_ps (&(d[i]),sum); //Zapis wyniku do pamięci
      }
      return 0;
    }
    
    int ops_AVX (float* a, float* b, float* c, float* d, int N)
    {
      for(int i=0; i<N; i+=8)
      {
        __m256 A = _mm256_load_ps(&(a[i]));
        __m256 B = _mm256_load_ps(&(a[i]));
        __m256 C = _mm256_load_ps(&(a[i]));
    
        __m256 mul  = _mm256_mul_ps(A, B);
    
        __m256 sqrt = _mm256_sqrt_ps(C);
    
        __m256 sum  = _mm256_add_ps(mul, sqrt);
    
        _mm256_store_ps(&(d[i]),sum);
      }
      return 0;
    }
    
    int main( int argc, char *argv[ ] )
    {
      fprintf(stdout, "START\n");
    
      int N = 100000000;
    
      unsigned __int64 ticks;
    
      //Alokacja pamieci z wyrównaniem 
      float* a = (float*)_aligned_malloc(sizeof(float)*N, 32);
      float* b = (float*)_aligned_malloc(sizeof(float)*N, 32);
      float* c = (float*)_aligned_malloc(sizeof(float)*N, 32);
    
      float* d = (float*)_aligned_malloc(sizeof(float)*N, 32);
    
      //Załadowanie losowych danych do przetworzenia
      for(int i=0; i<N; i++)
      {
        a[i] = rand();
        b[i] = rand();
        c[i] = rand();
      }
    
      ticks = __rdtsc(); //Pomar czasu w taktach 
      ops_scalar(a, b, c, d, N);
      ticks = __rdtsc() - ticks;
      printf("Scalar: %I64d\n", ticks);
    
      ticks = __rdtsc();
      ops_SSE(a, b, c, d, N);
      ticks = __rdtsc() - ticks;
      printf("SSE:    %I64d\n", ticks);
    
      ticks = __rdtsc();
      ops_AVX(a, b, c, d, N);
      ticks = __rdtsc() - ticks;
      printf("AVX:    %I64d\n", ticks);
    
      _aligned_free(a);
      _aligned_free(b);
      _aligned_free(c);
    
      _aligned_free(d);
      system("pause");
      return 0;
    }
    
  • Szablon Programu w WinApi

    Jak punkt wyjścia przy pisaniu kolejnych aplikacji pod system Windows polecam wykorzystanie załączonego szablonu FirstApp-Template
    Zawiera on przykład tworzenia okienka aplikacji, dołączaniu menu, wstawiania elementów formatek, załączania formatek w zasobach, i obsługę podstawowych komunikatów systemu windows.