2012-01-28 2 views
7

Я работаю с QT и OpenCV, у меня есть этот квадрат, который мне нужно извлечь, но мне нужно использовать преобразование из RGB в один канал (в основном RED). Любой совет будет более чем приветствуем, пожалуйста, не стесняйтесь советов, какие функции использовать. Заранее спасибо.извлечение одного изображения канала из изображения RGB с opencV

+0

Хотите ли вы, чтобы взглянуть на функцию cvtColor()? http://opencv.willowgarage.com/documentation/cpp/miscellaneous_image_transformations.html#cvtColor –

ответ

2

Насколько я знаю, вызов,

cvtColor(src, bwsrc, CV_RGB2GRAY); 

Можно сделать это, где SRC является многоканальным источником изображения и третий параметр представляет собой число каналов в пункте назначения. Таким образом, вы можете сделать это в OpenCV и отобразить изображение на вашем Qt-интерфейсе.

С другой стороны, вы можете разделить каналы на отдельные одноканальные массивы, используя соответствующий метод split().

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

10

cvSplit Я думаю, это то, что вы ищете (docs). Вы можете использовать его, например, разделить RGB в R, G и 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); 

Примечание вам нужно быть осторожным упорядоченности; убедитесь, что исходное изображение фактически заказывается как R, G, B (есть приличный шанс, что это B, G, R).

+0

это, вероятно, поиск искателя. – kiltek

7

Поскольку это помечено qt Я дам ответ на 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]); 

Проверено на OpenCV 2.4.5

Смежные вопросы