Co oznacza CV 8UC3 i inne typy w OpenCV?

Byłem zaskoczony, gdy nie mogłem znaleźć niczego w dokumentacji OpenCV opisującego-za pomocą słów - co oznaczają różne typy, a Googling też nie był zbyt pomocny. Wiem, że CV_8UC1 jest w skali szarości, ale co oznacza CV_8UC3? Czy to RGB? Albo YUV?

Również, co z innymi definicjami z types_c.h (również Brak komentarzy). Czy istnieje wzorzec do tego, czym jest konwencja nazewnictwa? Czy Mogę zinterpretować ich nazwy na to, jakie są ich cechy, takie jak kolory itp.?

#define CV_8UC1 CV_MAKETYPE(CV_8U,1)
#define CV_8UC2 CV_MAKETYPE(CV_8U,2)
#define CV_8UC3 CV_MAKETYPE(CV_8U,3)
#define CV_8UC4 CV_MAKETYPE(CV_8U,4)
#define CV_8UC(n) CV_MAKETYPE(CV_8U,(n))

#define CV_8SC1 CV_MAKETYPE(CV_8S,1)
#define CV_8SC2 CV_MAKETYPE(CV_8S,2)
#define CV_8SC3 CV_MAKETYPE(CV_8S,3)
#define CV_8SC4 CV_MAKETYPE(CV_8S,4)
#define CV_8SC(n) CV_MAKETYPE(CV_8S,(n))

#define CV_16UC1 CV_MAKETYPE(CV_16U,1)
#define CV_16UC2 CV_MAKETYPE(CV_16U,2)
#define CV_16UC3 CV_MAKETYPE(CV_16U,3)
#define CV_16UC4 CV_MAKETYPE(CV_16U,4)
#define CV_16UC(n) CV_MAKETYPE(CV_16U,(n))

#define CV_16SC1 CV_MAKETYPE(CV_16S,1)
#define CV_16SC2 CV_MAKETYPE(CV_16S,2)
#define CV_16SC3 CV_MAKETYPE(CV_16S,3)
#define CV_16SC4 CV_MAKETYPE(CV_16S,4)
#define CV_16SC(n) CV_MAKETYPE(CV_16S,(n))

#define CV_32SC1 CV_MAKETYPE(CV_32S,1)
#define CV_32SC2 CV_MAKETYPE(CV_32S,2)
#define CV_32SC3 CV_MAKETYPE(CV_32S,3)
#define CV_32SC4 CV_MAKETYPE(CV_32S,4)
#define CV_32SC(n) CV_MAKETYPE(CV_32S,(n))

#define CV_32FC1 CV_MAKETYPE(CV_32F,1)
#define CV_32FC2 CV_MAKETYPE(CV_32F,2)
#define CV_32FC3 CV_MAKETYPE(CV_32F,3)
#define CV_32FC4 CV_MAKETYPE(CV_32F,4)
#define CV_32FC(n) CV_MAKETYPE(CV_32F,(n))

#define CV_64FC1 CV_MAKETYPE(CV_64F,1)
#define CV_64FC2 CV_MAKETYPE(CV_64F,2)
#define CV_64FC3 CV_MAKETYPE(CV_64F,3)
#define CV_64FC4 CV_MAKETYPE(CV_64F,4)
#define CV_64FC(n) CV_MAKETYPE(CV_64F,(n))
 25
Author: sashoalm, 2014-11-28

3 answers

Jak zaznaczono w dokumentacji

Dowolny typ z listy można zdefiniować identyfikatorem w formularz CV_<bit-depth>{U|S|F}C(<number_of_channels>)

Gdzie U jest typem unsigned integer, S jest typem signed integer, A F jest typem float.

Więc CV_8UC3 jest 8-bitową, niepodpisaną macierzą całkowitą / obrazem z 3 kanałami. Chociaż najczęściej oznacza to obraz RGB (a właściwie BGR), nie wymaga tego. Oznacza to po prostu, że są trzy kanały, a sposób ich używania jest zależy od Ciebie i Twojego podania.

 36
Author: Hannes Ovrén,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-11-28 07:44:09

Wzorzec nazewnictwa przedstawia, w jaki sposób dane są faktycznie ułożone w pamięci komputera i nie są bezpośrednio związane z typem obrazu. W rzeczywistości układ danych i typ obrazu są odsprzęgane.

Prawdopodobnie poznałeś znaczenie wzoru CV_XX (czyli układ danych).

Dla obrazowanego typu danych, jeśli poprosisz OpenCV o załadowanie obrazu jako kolorowego obrazu , załaduje go jakoBGR i wyświetli jego dane jako CV_8UC3. Kilka rzeczy, na które warto zwrócić uwagę of:

  • tak, domyślna kolejność kanałów to BGR, a nie RGB. Jest to starsze zamówienie, ponieważ cyfrowe kanały wideo z kamer internetowych zdawały się podążać za tą kolejnością, gdy OpenCV 1.xx był w fazie rozwoju;
  • możesz użyć funkcji konwersji typów z modułu imgproc, czyli cv::cvtColor(). Wszystkie układy danych i typy obrazów nie są jednak kompatybilne, sprawdź doc;
  • kanał alfa jest zwykle ignorowany. Ignorując, mam na myśli, że cv::imwrite() napisze na przykład obraz 3-kanałowy bez Alfy. Większość funkcji przetwarzania będzie albo specyficzna dla obrazów jednokanałowych, albo zastosuje to samo przetwarzanie do wszystkich kanałów jednakowo; {]}
  • gdy funkcja przyjmuje (Alfa-)maskę, zwykle jest to opcjonalny parametr typu CV_8UC1, który domyślnie jest pustą macierzą.
 9
Author: sansuiso,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-11-28 07:58:16

8uc3 pomaga uzyskać dostęp do danych RGB. I nie ogranicza się tylko do obrazów. Można go używać do uzyskiwania dostępu do danych RGB również w chmurach punktów. Jeśli przekażesz wartość RGB jako macierz typu 8UC3, możesz wyświetlić tę wartość jako kolor w module viz i wyświetlić chmurę punktów RGB.

 0
Author: Giant Cloud,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-01-30 11:11:37