Konwertuj obraz jednokanałowy na 3-kanałowy obraz C ++/OpenCV


Używam openCV C ++
Muszę przekonwertować obraz 1 kanału na 3 kanały. Mogę więc użyć tego:
cvCvtColor (wynik, szary, CV_BGR2GRAY);
Wydaje się, że nie mogę tego zrobić, ponieważ wyjście img jest obrazem jednokanałowym. Jakieś pomysły?
Zaproszony:
Anonimowy użytkownik

Anonimowy użytkownik

Potwierdzenie od:

Musisz użyć
CV_GRAY2BGR
zamiast
CV_BGR2GRAY
.
Anonimowy użytkownik

Anonimowy użytkownik

Potwierdzenie od:

Spróbuj:
CvSize dim = cvSize(int width, int height);
IplImage* dst = cvCreateImage( dim, 8, 3 );
IplImage* gray = cvCreateImage(dim, 8, 1);
// Load the gray scale image
cvMerge(gray , NULL, NULL, NULL, dst);
cvShowImage("gray",gray);
cvShowImage("dst",dst);
cvWaitKey(0);

Zarówno dst, jak i gray muszą mieć ten sam typ danych. Nie można po prostu połączyć zmiennej zmiennoprzecinkowej w macierz uint. Będziesz musiał użyć do tego cvScale.
Anonimowy użytkownik

Anonimowy użytkownik

Potwierdzenie od:

sprawdziłem

cvtColor

w referencji OpenCV i znalazłem to:

C++: void

cvtColor

(InputArray

src

, OutputArray

dst

, int

code

, int

dstCn

=0 )


dstCn

- liczba kanałów w docelowym obrazie. Jeśli parametr jest równy 0, to liczba kanałów jest automatycznie określana na podstawie źródła i kodu.
użyłem
cvtColor(src,gray,CV_BGR2GRAY,1);

aby przekonwertować dywanik 3-kanałowy na 1 kanał i zadziałało. Więc zmień

dstCn

dla 3 może zadziałać dla Ciebie :)
Anonimowy użytkownik

Anonimowy użytkownik

Potwierdzenie od:

Spróbuj połączyć szary, szary i szary w BGR.
Anonimowy użytkownik

Anonimowy użytkownik

Potwierdzenie od:

MOIM ZDANIEM:
Jeśli wejście jest szare, wyjście będzie szare. Najlepsze, co możesz uzyskać, to kolorowy obraz oparty na danych pikseli, powiedzmy
(110, 110, 110)
dla danych
110
pikseli, a nie obraz w prawdziwych kolorach

Aby odpowiedzieć na pytania, Zaloguj się lub Zarejestruj się