Jestem trochę zmieszany z type()
metodą Mat
obiektu w OpenCV.
Jeśli mam następujące wiersze:
mat = imread("C:\someimage.jpg");
type = mat.type();
i type = 16
. Jak mogę się dowiedzieć, jaki jest typ macierzy maty?
Na próżno próbowałem znaleźć odpowiedź w jej podręczniku lub w kilku książkach.
opencv
opencv-mat
Tae-Sung Shin
źródło
źródło
depth()
ichannels()
, zamiast używania,type()
które zwraca złożoną mieszankę między typem danych a liczbą kanałów.depth()
kodów, co jest znacznie trudniejszetype()
.Odpowiedzi:
Oto przydatna funkcja, której możesz użyć, aby pomóc w identyfikacji macierzy opencv w czasie wykonywania. Uważam, że jest to przydatne przynajmniej do debugowania.
Jeśli
M
jest to typ varMat
, możesz to tak nazwać:Wyświetli dane takie jak:
Warto zauważyć, że istnieją również metody Matrix
Mat::depth()
iMat::channels()
. Ta funkcja jest po prostu wygodnym sposobem uzyskania czytelnej dla człowieka interpretacji z kombinacji tych dwóch wartości, których wszystkie bity są przechowywane w tej samej wartości.źródło
depth
ichans
możesz użyć odpowiednio makrCV_MAT_DEPTH(type)
iCV_MAT_CN(type)
. Powinien być również ich typint
, który pozwoliłby na użycieto_string(chans)
zamiastchans+'0'
.Do celów debugowania w przypadku, gdy chcesz wyszukać surowy plik Mat :: wpisz w debugerze:
Na przykład, jeśli typ = 30, typ danych OpenCV to CV_64FC4. Jeśli typ = 50, typ danych OpenCV to CV_16UC (7).
źródło
W nagłówku OpenCV " types_c.h " znajduje się zestaw definicji, które je generują, na przykład format to
CV_bits{U|S|F}C<number_of_channels>
So
CV_8UC3
8-bitowe znaki bez znaku, 3 kanały kolorów - każda z tych nazw jest mapowana na dowolną liczbę całkowitą z makrami w tym pliku.Edycja: zobacz „ types_c.h ” na przykład:
Tak
CV_8UC3 = 16
, ale nie mają korzystać z tego numeru, wystarczy sprawdzićtype() == CV_8UC3
, jeśli chcesz wiedzieć, jaki rodzaj wewnętrznej tablicy OpenCV jest.Pamiętaj, że OpenCV przekonwertuje jpeg na BGR (lub skalę szarości, jeśli przekażesz '0'
imread
) - więc nie mówi ci nic o oryginalnym pliku.źródło
types_c.h
znajduje się on w module podstawowym, np. Jeśli masz OpenCV zainstalowany bezpośrednio na dysku C w folderze opencv_2.4.11, plik nagłówkowy będzie w C: \ opencv_2.4.11 \ build \ include \ opencv2 \ core \ types_c .hcv::CV_8U
prawym przyciskiem myszy i wybrać,Go to Definition
aby otworzyć plik, w którymcv::CV_8U
zdefiniowanotypes_c.h
.Zawsze używam tego linku, aby zobaczyć, jakiego typu jest numer, który otrzymuję
type()
:LISTA TYPÓW MAT W OPENCV
Mam nadzieję, że to ci pomoże.
źródło
Dodałem trochę użyteczności do funkcji z odpowiedzi @Octopus, do celów debugowania.
źródło
Odpowiedziało na to kilka innych osób, ale znalazłem rozwiązanie, które działało naprawdę dobrze.
źródło