Решение задачи Черно-белая графика с Acmp

Без пояснения   Просмотров: 52


Одна из базовых задач компьютерной графики – обработка черно-белых изображений. Изображения можно представить в виде прямоугольников шириной w и высотой h, разбитых на w×h единичных квадратов, каждый из которых имеет либо белый, либо черный цвет. Такие единичные квадраты называются пикселами. В памяти компьютера сами изображения хранятся в виде прямоугольных таблиц, содержащих нули и единицы.

Во многих областях очень часто возникает задача комбинации изображений. Одним из простейших методов комбинации, который используется при работе с черно-белыми изображениями, является попиксельное применение некоторой логической операции. Это означает, что значение пиксела результата получается применением этой логической операции к соответствующим пикселам аргументов. Логическая операция от двух аргументов обычно задается таблицей истинности, которая содержит значения операции для всех возможных комбинаций аргументов.
Требуется написать программу, которая вычислит результат попиксельного применения заданной логической операции к двум черно-белым изображениям одинакового размера.

Код

#include <bits/stdc++.h>
using namespace std;
int w, h;
char temp, c1, c2, c3, c4;

vector<vector<char> > a;
vector<vector<char> > b;
vector<char> t;

void solve(int i, int j){
    if(a[i][j] == '0' && b[i][j] == '0')
        cout << c1;
    else if(a[i][j] == '0' && b[i][j] == '1')
        cout << c2;
    else if(a[i][j] == '1' && b[i][j] == '0')
        cout << c3;
    else
        cout << c4;

}

int main()
{
    cin >> w >> h;
    for(int i = 0; i < h; ++i){
        t.clear();
        for(int j = 0; j < w; ++j){
            cin >> temp;
            t.push_back(temp);
        }
        a.push_back(t);
    }

    for(int i = 0; i < h; ++i){
        t.clear();
        for(int j = 0; j < w; ++j){
            cin >> temp;
            t.push_back(temp);
        }
        b.push_back(t);
    }
    cin >> c1 >> c2 >> c3 >> c4;


    for(int i = 0; i < a.size(); ++i){
        for(int j = 0; j < a.at(i).size(); ++j)
            solve(i, j);
        cout << endl;
    }

    return 0;
}

         

Администратор Photo Автор: Администратор



Комментарии

Чтобы написать комментарии вам нужно войти в систему или зарегистрироваться