Witajcie.
Mam na żądanie przygotować program, który będzie obsługiwał filtry. Po wczytaniu kolorowego zdjęcia 200x200 ma przepuszczać przez jeden z trzech filtrów i zmieniać na przefiltrowany kolorowy i czarno biały. Nie wiem jak to zrobić. Coś zacząłem, ale wydaje mi się, że jest to do kitu. Filtry jakie mogę zaimplementowac to np wygładzenie czy wyostrzenie.
http://wklejto.pl/862460
Biblioteka opencv, co prawda głównie zrobioną do sztucznej inteligencji, ale takie coś w niej zrobisz w mala ilość kodu. Wpisz w internecie.
Bardzo mało powiedziałeś o problemie.
- Czy musisz używać C++? Myślę, że w takim Pythonie zamknąłbyś się w paru linijkach.
- Jeżeli musisz C++, to czy możesz używać bibliotek zewnętrznych? Jeżeli tak, to jakich chcesz, jakich licencji chcesz itp, czy raczej są ustalone warunki?
- Czy musisz implementować algorytmy filtrów sam?
Algorytm:
Jeżeli nie musisz C++, to polecam Pythona + opencv.
Jeżeli musisz C++
Jeżeli możesz używać jakich chcesz bibliotek
Jeżeli możesz używać gotowych implementacji algorytmów filtrów, to chyba bym wybrał OpenCV.
Jeżeli musisz sam implementować algorytmy filtrów, to chyba bym wybrał Qt do ogarniania obrazków no i operował sobie na pixelach obrazka.
Jeżeli możesz używać tylko wybranych bibliotek, to podaj proszę jakich.
Jeżeli nie możesz używać bibliotek w ogóle, to nie zazdroszczę implementacji wczytywania/zapisywania obrazków :) Z filtrami będzie łatwiej.
- Muszę używać C++.
- Nie ma ustalonych warunków, aczkolwiek dobrze by było tak zrobić jak juz trochę zacząłem.
- Tak muszę implementować sam i potestować różne. To jest wrzucić pare do programu i poprzez odkomentowywanie sprawdzać wyniki działania.
- Algorytmy to zrobienia na czarno biało masz nawet na wikipedi
- Tak naprawdę ten obrazek to nic więcej jak matryca.
- https://pythonexamples.org/python-opencv-read-image-cv2-imread/
- https://stackoverflow.com/questions/28981417/how-do-i-access-the-pixels-of-an-image-using-opencv-python
Jak już będziesz wiedział jak odczytywać zdjęcie, będziesz znał algorytm zostanie ci zastosowanie go per pixel itd.
Z przetwarzania obrazów jestem noga, a zwłaszcza w C++...
Potrzebuje jakoś waszej pomocy.
Wytyczne mogę mieć następujące:
- Żeby program był szybki w działaniu tj, stowrzyć tablice z 9 liczbami całkowitymi.
- Zadeklarować różnego rodzaju filtry.
a) Stworzyć 2 typy obrazków, do wygładzania, żeby miał ostre krawędzie 150x150, a drugi fragment jakiegoś krajobrazu na którym będzie można zastosować filtr wyostrzający - > to do zdjęcia czarno białego.
b) Do kolorowe - zaaokolować pamięć która obsłuży kolorwoy obrazek. i też takie 2 typy obrazków, żeby zobaczyć czy działa.
Wydaje mi się, że nie uda mi się tego zrobić, dlatego proszę jakąś przyjazną duszę o pomoc...
Stary wystarczy poszukać, pierwsze z brzegu:
https://stackoverflow.com/questions/25814582/efficient-way-to-grayscale-a-frame-without-using-opencv
Tak naprawdę musisz przenieść matmę do c++ i zastosować do zdjęcia. I tu musisz troszkę o opencv poczytać, wczytywaniu obrazków itd. Tego za ciebie nie zrobimy. Jak nawet na stacku zauważyli opencv jest opensource i można wzorować się na ich kodzie.
Jak bardzo sam musisz to zaimplementować? W opencv można samemu też dodać swoje filtry w prosty sposób TUTAJ, ale nie jestem pewien, czy takie rozwiązanie będzie u ciebie akceptowalne. Jest też sporo filmów na yt o obsłudze zdjęć w opencv, zacznij pisać kod i wtedy zobaczymy, z czym rzeczywiście będziesz miał problem
Możesz zaimplementować konwolucję a potem zmieniać tylko macierz żeby uzyskać rozmycie, wyostrzenie, uwydatnienie krawędzi, itp.
https://en.wikipedia.org/wiki/Kernel_(image_processing)
http://www.songho.ca/dsp/convolution/convolution.html#convolution_2d
Zarejestruj się i dołącz do największej społeczności programistów w Polsce.
Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.