Страницы

Поиск по вопросам

понедельник, 8 июля 2019 г.

Декодирование JPEG

Подскажите свободно распространяемую библиотеку (совместимую с Windows) или исходник, в котором из JPEG файла выделялись квантованные косинусные коэффициенты. Это первый шаг обратного JPEG-декодирования (коды Huffman-а в DCT-коэффициенты). Я знаю алгоритм как это сделать, но очень не хочется заново изобретать велосипед и тратить время на тестирование самопальной программы.


Ответ

Это можно сделать с помощью libjpeg.
Пример (отсюда: Extracting JPEG DCT coefficients):
#include #include #include
using namespace std;
JBLOCKARRAY rowPtrs[MAX_COMPONENTS];
void read(jpeg_decompress_struct srcinfo, jvirt_barray_ptr * src_coef_arrays) { //cout << "Started reading DCT" << endl; for (JDIMENSION compNum=0; compNum < srcinfo.num_components; compNum++) { size_t blockRowSize = (size_t) sizeof(JCOEF) * DCTSIZE2 * srcinfo.comp_info[compNum].width_in_blocks; for (JDIMENSION rowNum=0; rowNum < srcinfo.comp_info[compNum].height_in_blocks; rowNum++) { // A pointer to the virtual array of dct values rowPtrs[compNum] = ((&srcinfo)->mem->access_virt_barray)((j_common_ptr) &srcinfo, src_coef_arrays[compNum],rowNum, (JDIMENSION) 1, FALSE); // Loop through the blocks to get the dct values for (JDIMENSION blockNum=0; blockNum < srcinfo.comp_info[compNum].width_in_blocks; blockNum++){ //...iterate over DCT coefficients for (JDIMENSION i=0; iint main() { //TODO: change this to read a different file const char* filename = "image4.jpg";
FILE * infile; struct jpeg_decompress_struct srcinfo; struct jpeg_error_mgr srcerr;
if ((infile = fopen(filename, "rb")) == NULL) { fprintf(stderr, "can't open %s
", filename); return 0; }
srcinfo.err = jpeg_std_error(&srcerr); jpeg_create_decompress(&srcinfo); jpeg_stdio_src(&srcinfo, infile); (void) jpeg_read_header(&srcinfo, FALSE);
//coefficients jvirt_barray_ptr * src_coef_arrays = jpeg_read_coefficients(&srcinfo); read(srcinfo, src_coef_arrays);
jpeg_destroy_decompress(&srcinfo); fclose(infile); return 0; }

Комментариев нет:

Отправить комментарий