gpt4 book ai didi

c++ - 如何使用 jpg 库从 jpg 中获取 DC 系数?

转载 作者:塔克拉玛干 更新时间:2023-11-03 08:01:00 24 4
gpt4 key购买 nike

我是新手,但我需要使用 jpeg 库从 jpeg 中获取直流系数?有人提示我在jdhuff.c 中有相应的函数,但我找不到。我试图找到一篇关于 jpg 库的体面文章,在那里我可以获得它,但到目前为止没有成功。

所以我希望你们能帮我一点忙,给我一些文档或提示。所以,这是我所知道的:

一张jpg图片由8x8 block 组成。那是 64 像素。其中63个命名为AC,1个命名为DC。那就是系数。位置在数组[0][0]。

但我如何使用 jpg 库准确读取它?我正在使用 C++。

编辑:这是我目前所拥有的:

read_jpeg::read_jpeg( const std::string& filename )
{
FILE* fp = NULL; // File-Pointer
jpeg_decompress_struct cinfo; // jpeg decompression parameters
JSAMPARRAY buffer; // Output row-buffer
int row_stride = 0; // physical row width
my_error_mgr jerr; // Custom Error Manager


// Set Error Manager
cinfo.err = jpeg_std_error(&jerr.pub);
jerr.pub.error_exit = my_error_exit;

// Handle longjump
if (setjmp(jerr.setjmp_buffer)) {

// JPEG has signaled an error. Clean up and throw an exception.
jpeg_destroy_decompress(&cinfo);
fclose(fp);
throw std::runtime_error("Error: jpeg has reported an error.");
}

// Open the file
if ( (fp = fopen(filename.c_str(), "rb")) == NULL )
{
std::stringstream ss;
ss << "Error: Cannot read '" << filename.c_str() << "' from the specified location!";
throw std::runtime_error(ss.str());
}

// Initialize jpeg decompression
jpeg_create_decompress(&cinfo);

// Show jpeg where to read the data
jpeg_stdio_src(&cinfo, fp);

// Read the header
jpeg_read_header(&cinfo, TRUE);

// Decompress the file
jpeg_start_decompress(&cinfo);

// JSAMPLEs per row in output buffer
row_stride = cinfo.output_width * cinfo.output_components;

// Make a one-row-high sample array
buffer = (*cinfo.mem->alloc_sarray)((j_common_ptr) &cinfo, JPOOL_IMAGE, row_stride, 1);

// Read image using jpgs counter
while (cinfo.output_scanline < cinfo.output_height)
{

// Read the image
jpeg_read_scanlines(&cinfo, buffer, 1);
}

// Finish the decompress
jpeg_finish_decompress(&cinfo);

// Release memory
jpeg_destroy_decompress(&cinfo);

// Close the file
fclose(fp);
}

最佳答案

使用标准 API 无法做到这一点。使用 libjpeg API,您可以获得的最接近的是 Y/Cb/Cr channel 的原始像素数据。

要获取系数数据,您需要破解 decode_mcu 函数(或其调用者)以保存在那里解码的数据。

关于c++ - 如何使用 jpg 库从 jpg 中获取 DC 系数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7009973/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com