Я пытаюсь извлечь качественные слои из потока файлов JPEG 2000, который содержится в файле .j2k для тестирования. Я пытаюсь сделать это, чтобы научиться передавать файловый поток и, в конечном итоге, выполнить выбор области интереса (ROI) для него. Я хочу делать все это без декодирования, и сейчас единственная утилита, которую я имею, — это библиотека OpenJPEG.
Я использовал утилиту image_to_j2k (linux) для преобразования тестового изображения в файловый поток, содержащийся в файле .j2k. Затем я прочитал файл .j2k в буфер в двоичном режиме:
long fsize = get_file_size("img.j2k"); //This does what it's supposed to
char* buffer = new char[fsize];
ifstream in ("img.j2k", ios::in | ios::binary);
in.read(buffer, fsize); //The entire file goes into the buffer
ofstream out1("out1.j2k");
ofstream out2("out2.j2k");
ofstream out3("out3.j2k");
//This is where I try to truncate the filestream
out1.write(buffer, fsize); //Write the entire file to out1.j2k - this works
out2.write(buffer, 11032); //Write 11032 bytes of the filestream to out2.j2k - this does not to what I thought it would
out3.write(buffer, 14714); //Write 14714 bytes of the filestream to out2.j2k - this does not to what I thought it wouldin.close();
out1.flush();out1.close();
out2.flush();out2.close();
out3.flush();out3.close();
Количество байтов, записываемых в файлы out2 и out3, выбирается не случайно, а из файла индекса, который OpenJPEG создает во время сжатия. Мысль состояла в том, что если бы я взял файл с начала и прочитал его до определенной точки, где индексный файл говорит мне, что существует маркер «end_pos», соответствующий концу качественного слоя, я бы симулировал незаконченную беспроводную передачу файл — это конечная цель — передать файл по беспроводной сети в лесу и показать изображение в лучшем качестве на портативном устройстве или ноутбуке в другом месте в лесу. Результат попытки использовать j2k_to_image для файлов out2.j2k и out3.j2k:
[ERROR] JPWL: bad tile byte size (1307053 bytes against 10911 bytes left)
[ERROR] 00000081; expected a marker instead of 1
ERROR -> j2k_to_image: failed to decode image!
Я иду по этому совершенно неправильному пути? Не использовать JPEG 2000 не может быть и речи. Благодарю за любые ответы, я действительно просмотрел документацию по этому вопросу, но не могу найти эту деталь.
Задача ещё не решена.