2012-01-28 12 views
7

Pracuję z QT i OpenCV, mam ten kwadrat, który muszę wyodrębnić, ale muszę użyć konwersji z RGB do jednego kanału (w zasadzie RED). Wszelkie porady będą mile widziane, prosimy o poradę, jakie funkcje zastosować. Z góry dziękuję.Wyodrębnij jeden obraz kanału z obrazu RGB z opencV

+0

Chciałbyś przyjrzeć funkcji cvtColor()? http://opencv.willowgarage.com/documentation/cpp/miscellaneous_image_transformations.html#cvtColor –

Odpowiedz

2

O ile wiem, wywołanie,

cvtColor(src, bwsrc, CV_RGB2GRAY); 

można zrobić, gdzie src jest wielokanałowy dźwięk źródłowy obraz i trzeci parametr reprezentuje liczbę kanałów w miejscu przeznaczenia. Możesz to zrobić w OpenCV i wyświetlić obraz w swoim interfejsie Qt.

Z drugiej strony można podzielić kanały na osobne tablice jednokanałowe przy użyciu odpowiedniej metody split().

http://opencv.willowgarage.com/documentation/cpp/core_operations_on_arrays.html#split

10

myślę cvSplit jest to, czego szukasz (docs). Można go używać na przykład podzielić RGB do R, G i B:

/* assuming src is your source image */ 
CvSize s = cvSize(src->width, src->height); 
int d = src->depth; 
IplImage* R = cvCreateImage(s, d, 1); 
IplImage* G = cvCreateImage(s, d, 1); 
IplImage* B = cvCreateImage(s, d, 1); 
cvSplit(src, R, G, B, null); 

Uwaga trzeba uważać na zamawiającego; upewnij się, że oryginalny obraz jest rzeczywiście uporządkowany jako R, G, B (istnieje spora szansa, że ​​to B, G, R).

+0

Jest to prawdopodobnie to, czego szukał pytający. – kiltek

7

Ponieważ jest to oznaczone qt dam odpowiedź C++.

// Create Windows 
    namedWindow("Red",1); 
    namedWindow("Green",1); 
    namedWindow("Blue",1); 

    // Create Matrices (make sure there is an image in input!) 
    Mat input; 
    Mat channel[3]; 

    // The actual splitting. 
    split(input, channel); 

    // Display 
    imshow("Blue", channel[0]); 
    imshow("Green", channel[1]); 
    imshow("Red", channel[2]); 

Testowane na OpenCV 2.4.5