OpenCV: выбор цвета, интенсивности и текстуры изображения - PullRequest
2 голосов
/ 08 октября 2009

Я новичок в OpenCV и только начал просеивать API. Я собираюсь получить значения цвета, интенсивности и текстуры каждого пикселя, составляющего изображение. Я возился со структурой - IplImage для начала, но не смог добиться большого прогресса.

Пожалуйста, дайте мне знать о любых способах сделать это.

ура

1 Ответ

3 голосов
/ 08 октября 2009

Вы пробовали OpenCV 2.0 ? У них есть новый интерфейс C ++, который делает вещи намного проще. Вы можете использовать их новый класс Mat для загрузки изображений, эффективного доступа к пикселям и т. Д. Это намного чище, чем удовольствие от IplImage. Я использую \ doc \ opencv.pdf как ссылку на все, что мне нужно. У него есть учебники, примеры с новым интерфейсом C ++ и т. Д. - и этого достаточно, чтобы начать работу.

Если у вас есть более конкретные вопросы OpenCV, пожалуйста, не стесняйтесь спрашивать.

Вот некоторый демонстрационный код для начала: (Я использовал пространство имен cv):

    // Load the image (looks like MATLAB :) ? )
    Mat M = imread("h:\\lena.bmp");
    // Display
    namedWindow("Lena",CV_WINDOW_AUTOSIZE);
    imshow("Lena",M);
    waitKey();  

    // Crop out rectangle from (100,100) of size (200,200) of the red channel 
    const int offset[2] = {100,100};
    const int dims[2] = {200,200};  
    Mat Red(dims[0],dims[1],CV_8UC1);

    // Read it from M into Red
    uchar* lena = M.data;
    for(int i=0;i<dims[0];++i)
        for(int j=0;j<dims[0];++j)
        {
            // P = i*rows*channels + j*channels + c
            Red.at<uchar>(i,j) = *(lena + (i+offset[0])*M.rows*M.channels() + (j+offset[1])*M.channels()+0);
        }

    //Display
    namedWindow("RedRect",CV_WINDOW_AUTOSIZE);
    imshow("RedRect",Red);
    waitKey();
...