Tworzę program w OpenCV (2.4.8), który powinien odczytywać pliki wideo i wykonywać na nich obliczenia. Do tych obliczeń nie potrzebuję ramek o wysokiej rozdzielczości, mam całkowitą rozdzielczość 640 * 360.Zmiana rozdzielczości pliku wideo OpenCV
W pierwszych testach miałem kamera przymocowana i użyłem:
VideoCapture cap(0);
cap.set(CV_CAP_PROP_FRAME_WIDTH, 640);
cap.set(CV_CAP_PROP_FRAME_HEIGHT, 360);
Mat image;
cap.read(image);
namedWindow("firstframe", 1);
imshow("firstframe", image);
waitKey(0);
Które przeskalowany obraz idealnie. Teraz przechodzę do następnego etapu, w którym chcę użyć mojego programu do zapisanego wideo zamiast na żywo (którego użyłem do testowania). Kiedy zmieniam "0" ze ścieżką pliku źródłowego (ciąg), plik jest ładowany, ale rozdzielczość pozostaje 1920 * 1080.
Czy zrobiłem coś złego? Czy istnieje sposób na załadowanie wideo w niższej rozdzielczości "w locie"?
Przeczytałem dokumentację OpenCV. Niektóre ustawienia są oznaczone jako "tylko kamery", ale to ustawienie nie jest: http://docs.opencv.org/modules/highgui/doc/reading_and_writing_images_and_video.html#videocapture-videocapture
Używam OpenCV na Macu i zainstalowałem go z MacPorts.
Daj mi znać, jeśli potrzebujesz więcej informacji.
naprzód Dzięki za pomoc
edit: zdałem sobie sprawę, że (...) Działa cap.set zwraca wartość logiczną, więc próbowałem ich drukowania i oboje zwracają 0 To oczywiście potwierdza, że ramka nie jest zmieniana. Nadal nie ma pojęcia, dlaczego ...
edit 2: Więc teraz, za rozwiązanie tymczasowe używam następujący wiersz po read (obrazu):
resize(image, image, Size(640, 360), 0, 0, INTER_CUBIC);
I to działa. Ale domyślam się, że to nie jest najbardziej optymalne rozwiązanie.
jeśli masz kamerę internetową, możesz ustawić rozdzielczość pozyskanych obrazów, ale po załadowaniu filmu wideo jest tam zakodowana rozdzielczość. Jedynym sposobem, jaki widzę, jest zmiana rozmiaru obrazu, tak jak ty. –
Dzięki, myślałem o tym samym. Zmiana rozdzielczości jest prawdopodobnie dokonywana bezpośrednio w sprzęcie na kamerach internetowych. Domyślam się, że ffmpeg zmieniałby rozmiar w locie z włączoną opcją. Ale potem znowu, to powinno być takie samo obliczenie jak moje oświadczenie o zmianie rozmiaru. – user3319803