C ++ версия кода MATLAB, которая считывает необработанные байты изображения из файла и преобразует их в размеры изображения - PullRequest
0 голосов
/ 16 января 2019

У меня есть некоторый простой код MATLAB, который читает файл RAW, представляющий изображение, изменяет форму и транспонирует данные в размеры изображения, а затем показывает изображение:

    width = 640;
    height = 480;
    fin = fopen('image.raw','r');
    I = fread(fin, width * height, 'uint8=>uint8'); 
    img = reshape(I, width, height);
    img = img';
    imgFromRaw = imshow(img)

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

    ifstream file("image.raw", ios::binary);
    rawData.insert(rawData.begin(),
        std::istream_iterator<BYTE>(file),
        std::istream_iterator<BYTE>());

Но я не знаю, как вручную изменить данные в матрицу 640 * 480. Есть идеи?

1 Ответ

0 голосов
/ 16 января 2019

Вы должны иметь доступ к лямбде, как это:

auto& pixel=[rawData, width](int row, int col) {
    return rawData[col+width*row];};

Кроме того, вы можете написать функцию, которая делает то же самое. Лямбды - это короткие и удобные способы создания функции.

BYTE& pixel(vector<BYTE>& rawData, int width, int row, int col) {
    return rawData[col+width*row];
};

Чтобы использовать лямбду:

auto value_at_lower_right = pixel(479,639);

Для использования функции:

BYTE value_at_lower_right = pixel(rawData, width, 479,639);

Они также могут использоваться на левой стороне для изменения значения на изображении:

pixel(rawData, width, 479,639) = 127;
// or, for the lambda
pixel(479,639) = 127;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...