C ++ Pixel Сравнение и раскраска - PullRequest
0 голосов
/ 27 февраля 2020

Я студент факультета компьютерных наук и застрял на курсе C ++. Я не могу найти способ сравнить пиксель двух изображений и затем объединить в одно. Это задача, на которой я застрял в данный момент:

Part1 :

Загрузите две предоставленные пары изображений, которые находятся в папкеImages: ( пара 1: render_top_1 & render_top_2, пара 2: render_bottom_1 & render_bottom_2) Примечание. Для загрузки изображений вы можете использовать пример функции загрузки, приведенной в лекциях и руководствах. Для каждой пары сравните их пиксели и, если они одинаковые, сделайте их черными, если они не будут белыми. Сохраните полученные изображения как «stage1_top.png» для верхней пары и «stage1_bottom.png» для нижней пары. Затем вам нужно будет объединить оба изображения «stage1_top» и «stage1_bottom» в одно изображение. Комбинация должна быть равным разделением, принимая 50% значения пикселя от каждого из изображений. Сохранить полученное объединенное изображение как «stage1_combined.png»

До сих пор мне удалось загрузить изображения и получить их ширину и высоту, и теперь я думаю, что я должен использовать двойное значение для l oop, чтобы Сравните top_1 с top_2 и botto_1 с bottom_2.

Вот как я загружаю картинки:

//Pair 1 Loading images
    fipImage inputImage_bot1;
    inputImage_bot1.load("Images\render_bottom_1.png");
    inputImage_bot1.convertToFloat();

    fipImage inputImage_top1;
    inputImage_top1.load("Images\render_top_1.png");
    inputImage_top1.convertToFloat();

    fipImage inputImage_bot2;
    inputImage_bot2.load("Images\render_bottom_2.png");
    inputImage_bot2.convertToFloat();

    fipImage inputImage_top2;
    inputImage_top2.load("Images\render_top_2.png");
    inputImage_top2.convertToFloat();

    auto width_bot1 = inputImage_bot1.getWidth();
    auto height_bot1 = inputImage_bot1.getHeight();
    const float* const inputBuffer_bot1 = (float*)inputImage_bot1.accessPixels();

    auto width_bot2 = inputImage_bot2.getWidth();
    auto height_bot2 = inputImage_bot2.getHeight();
    const float* const inputBuffer_bot2 = (float*)inputImage_bot2.accessPixels();

    auto width_top1 = inputImage_top1.getWidth();
    auto height_top1 = inputImage_top1.getHeight();
    const float* const inputBuffer_top1 = (float*)inputImage_top1.accessPixels();

    auto width_top2 = inputImage_top2.getWidth();
    auto height_top2 = inputImage_top2.getHeight();
    const float* const inputBuffer_top2 = (float*)inputImage_top2.accessPixels();

Я пытался использовать для l oop для сравнения пикселей:

for (int i = 0; i < width_bot1; i++)
    {
        for (int j = 0; j < width_bot2; j++)
        {
            if (inputImage_bot1[i][j] == inputImage_bot2[i][j])
            {
                //comparison code here
            }
        }
    }

Я получаю следующая ошибка:

no operator "[]" matches these operands
opearand types are: FIBITMAP [ int ]

Я могу использовать только библиотеку FreeImagePlus, и я полностью потерян с ней. Как я могу сравнить пиксели двух изображений и затем сохранить 50% каждого в другом файле?

1 Ответ

1 голос
/ 27 февраля 2020

При просмотре документации класса fipImage для данного класса не определена перегрузка operator[]. Поэтому вы не можете получить доступ к пикселям таким образом.

Если мы уделим больше внимания документации, мы сможем найти методы fipImage::getPixelIndex() и fipImage::getPixelColor (и их задайте вариантов), которые, кажется, делают то, что вы ищете.

Пример использования:

// We assume:
//    - We have a fipImage instance called my_image.
//    - We want to get the pixel color at position (x,y)

RGBQUAD color;
if(my_image.getPixelColor(x, y, &color))
{
    // color now contains the color at position (x,y).
}

Подробная информация о RGBQUAD структуру можно найти здесь .

...