У меня возникла следующая проблема: я получил файлы изображений (предполагается, что это RGB888), но я не уверен, действительно ли это данные такого рода.(Я знаю только предполагаемый формат (например, 400 * 600) данных, поэтому я сделал пример данных изображения, где точно знаю, какой формат имеет шестнадцатеричные данные.)
Данные, которые я создалвыглядит примерно так:
0xf3, 0x8d, 0x4c, 0xff, 0xf2, 0x8f, 0x4b, 0xff, 0xef, ...
Я в этом случае уверен, что это RGB888, потому что я его конвертировал.Итак, первый шаг, который я сделал, - загрузить файл и передать данные в массив char.
std::ifstream infile;
char *array;
uint8_t *pixelValues;
infile.exceptions ( std::ifstream::failbit );
try {
infile.open(filename, std::ios_base::binary);
infile >> std::hex >> std::setw(2) >> std::setfill('0');
int length;
if (!infile.bad()) {
length = infile.rdbuf()->pubseekoff(0, std::ios_base::end);
array = new char[length];
infile.rdbuf()->pubseekoff(0, std::ios_base::beg);
infile.read(array, length);
infile.close();
}
uint8_t value;
pixelValues = new uint8_t[length/5];
std::size_t counter = 0;
std::size_t valueCounter = 0;
while (true) {
value = strtol(&array[counter], NULL, 0);
pixelValues[valueCounter++] = value;
while ((array[counter] != ',')) counter++;
counter++;
if (counter >= length) break;
}
}
После этого шага данные в uint8_t pixelValues должны быть Bitarray данных в файле.
Теперь у меня вопрос: как поступить ... правильно ли я все делаю или есть более «умные» способы получения изображения из этих шестнадцатеричных данных?
Моя коллега сказала мне, что я должен перейти к следующему шагу, используя openCV, но я не могу его запустить вообще.
Если у кого-нибудь из вас, ребята, есть умная идея, пожалуйста, дайте мне знать; -)