Witam wszystkich zmagam się z napisaniem programu, który po włączeniu stworzy taka animację. Jestem początkująca programistka i nie wiem czy to jest w ogóle wykonalne, a jeśli tak to czy dam radę napisać to w C++? Jeśli tak to czy ma ktoś jakiś pomysł na ten program?
Zapewne potrzebny by był algorytm, który klatka po klatce wykrywa krawędzie w filmie, a następnie odpowiednio podstawia te znaki. Jest to jak najbardziej do zrobienia, ale wątpię, żeby początkujący programista podołał takiemu zadaniu.
w komentarzach masz opisane w jaki sposób uzyskano ten efekt, nawet VLC ma opcję wyświetlania filmu w ASCII. Na androida jest aplikacja która przechwytuję obraz z aparatu i zmienia na znaki. Opcji jest masa. Jeszcze coś online http://www.kickjs.org/example/video_ascii_art/Video_Ascii_Art.html. Może coś wydedukujesz
Zastanawiałam się czy mogę w jakiś sposób przekształcić kod z Matrixa , żeby wypisał mi taką animację. Czy w ten sposób dam radę to zrobić?
Zadając takie pytanie myślę, że mogę śmiało odpowiedzieć - nie dasz rady tego zrobić. Nie teraz, nie dopóki nie zrozumiesz jak działa dokładnie przekształcanie bitmapy na tekst ASCII. Najważniejsza różnica?
Kod który podesłałaś wypisuje po prostu losowe ciągi literek "jak w Matrixie"
Wideo w ASCII nie polegają na losowym doborze literek, tylko takim, żeby zgadzała się jasność pojedynczego piksela. Czyli algorytm (wymyślony na szybko) mógłby działać w ten sposób, że przygotowujemy sobie tablicę znaków posortowanych w kolejności od takiego który zajmuje najmniej pikseli powierzchni na ekranie (spacja = brak białych pikseli) do takiego który zajmuje najwięcej (pewnie to będzie #). Resztę liter przypisujemy pomiędzy tymi znakami zależnie od zajmowanej przez nie przestrzeni.
Następnie idziemy zgodnie z krokami:
- Pobierz bitmapę - kolejną klatkę filmu
- Dopasuj jej rozdzielczość do rozdzielczości (w znakach) na ekranie
- Zamień obraz na czarno biały i dla każdego piksela:
a) pobierz znak zgodnie z jasnością.
b) Wypisz na ekranie wybrany znak
Moim zdaniem taki obraz byłby nadal mało czytelny. Lepiej byłoby obniżyć rozdzielczość obrazka do x*8, a następnie każdy układ pikseli 8x8 dopasowywać do najbardziej podobnej litery. To faktycznie ma mało wspólnego z losowaniem znaków rand-em
czy może ktoś dać link do oryginału ? bardzo proszę
A ja to bym zrobił binaryzację (a dokładnie tylko dopasowane wartości jasności, reszta informacji jest zbędna) obrazu klatka po klatce (być może bym odrzucił pół klatki) do macierzy, a potem bym najobrzydliwiej, przypisał wartości progowe do wartości w macierzy wraz z obniżeniem eoździelczości i przeklepał przypisane ascii do drugiej macierzy.
No ewentualnie bym robił to na strumieniu znaków z filmu na buforach, bez zabawy z tak tłustymi macierzami i rozdrabnianiem się na poszczególne klatki - mniej pamięci, więcej CPU i szybsze to będzie. Łatwiej też zrobić obniżenie rozdziałki.
Sporo z tego spróbowałbym realizować na samym cache CPU, a tylko wyniki peklował na RAM. W każdym razie, zapewne takie sztuczki na sprzęcie nie są możliwe na w10. Po za tym bez jezyka niskiego poziomu, do cache nie ma wjazdu ^^
A i tak większość zeżre dekompresja/kompresja i można by tu wielowątkowość zastosować z kombinacją, aby upchać się jak najbardziej w cache.
Jeden rdzeń dekompresuje i szykuje dane, drugi przetwarza, a trzeci kompresuje.