2010-01-23 14 views
33

Jak mogę zobaczyć przestrzeń kolorów mojego obrazu z openCV?wykryj przestrzeń kolorów z openCV

Chciałbym być pewien, że jest RGB, przed przekonwertować na inny przy użyciu cvCvtColor function()

dzięki

+0

Widzę poniżej, że wyciągasz zdjęcia z telefonu. W jakim formacie? Nie brzmi już tak, jakbyś pobrał rzeczywiste struktury 'IplImage' - w jaki sposób dostajesz obrazy do OpenCV? – ezod

+0

Nawet zastanawiam się, czy obrazy, które robię z kamery internetowej, są zapisywane jako RGB lub BGR? (czy przypadkiem znalazłeś swoje rozwiązanie?) –

Odpowiedz

17

Niestety, OpenCV nie przewiduje jakichkolwiek wskazań co do przestrzeni barw w strukturze IplImage, więc jeśli ślepo podnosisz IplImage skądś, nie ma po prostu sposobu, aby dowiedzieć się, jak został zakodowany. Ponadto, żaden algorytm nie może definitywnie powiedzieć, czy obraz powinien być interpretowany jako HSV w porównaniu z RGB - to wszystko jest po prostu garstką bajtów do maszyny (powinno być this być HSV lub RGB?). Polecam owijać IplImages w inną strukturę (lub nawet klasę C++ z szablonami!), Aby pomóc Ci śledzić te informacje. Jeśli jesteś naprawdę zdesperowany i masz do czynienia tylko z pewnym typem obrazów (sceny plenerowe, biura, twarze itp.), Możesz spróbować obliczyć statystyki na swoich obrazach (np. Budować histogramy dla naturalnych obrazów RGB, a niektóre dla naturalne obrazy HSV), a następnie spróbuj sklasyfikować całkowicie nieznany obraz, porównując, którą przestrzeń kolorów jest bliżej.

+0

dziękuję, więc te zdjęcia są zrobione przez inteligentny telefon za pomocą google android. Sądzę, że są to obrazy RGB, czy to prawda? RGB jest najczęstszą przestrzenią kolorów, prawda? dziękuję – aneuryzm

+2

Ponownie, naprawdę nie ma sposobu, aby odróżnić bez wyświetlania obrazów, ale myślę, że RGB jest dość bezpiecznym założeniem - to jest to, o czym większość ludzi myśli, gdy mówią o trzykanałowej przestrzeni kolorów. Byłbym bardzo zaskoczony, gdyby to było coś jeszcze. – rcv

3

Urządzenie IplImage struct ma pole o nazwie colorModel składające się z 4 znaków. Niestety, OpenCV ignoruje to pole. Ale możesz użyć tego pola do śledzenia różnych modeli kolorów.

6

txandi stanowi interesujący punkt. OpenCV ma przestrzeń kolorów BGR, która jest używana domyślnie. Jest to podobne do przestrzeni kolorów RGB z tym wyjątkiem, że kanały B i R są fizycznie przełączane na obrazie. Jeśli uporządkowanie kanałów fizycznych jest dla ciebie ważne, musisz przekonwertować obraz za pomocą tej funkcji: cvCvtColor (defaultBGR, imageRGB, CV_BGR2RGB).

2

Jak Boatzart powiedział, nie ma sposobu, aby programowo wykryć przestrzeń barw poprzez kontrolę trzech kolorów kanałów, chyba że masz a priori znajomość zawartości obrazu (na przykład, nie jest markerem na obraz, którego kolor jest znany). Jeśli będziesz akceptować obrazy z nieznanych źródeł, musisz zezwolić użytkownikowi na określenie przestrzeni kolorów ich obrazu. Dobrą wartością domyślną byłoby przyjęcie RGB.

Jeśli zmodyfikujesz dowolny piksel przed wyświetleniem, a używasz przeglądarki innej niż OpenCV, prawdopodobnie powinieneś użyć cvCvtColor(src,dst,CV_BGR2RGB) po zakończeniu działania wszystkich filtrów kolorów. Jeśli korzystasz z OpenCV dla przeglądarki lub będziesz zapisywać obrazy do pliku, powinieneś upewnić się, że są w przestrzeni kolorów BGR.

Powiązane problemy