回答
你必须解压缩图像,使用turbojpg库(速度非常快),它会给你一组unsigned char
作为RGB(或RGBA)。现在你有一个未压缩的图像,它分别具有R G和B的字节值。
你可以从这里开始做一个简单的循环,它将通过3 * 8 char
块并使用memcpy
复制它们到其他一些内存位置。
您必须记住,从turbojpg库返回的数组是一维字节的线性数组。所以扫描线一个接一个地存储。在创建块时考虑到这一点,根据您的需要而定,您必须以不同的方式遍历数组。
嗯,这个顽固的方法。我的心向你倾诉。预计会学到很多东西,但要预先警告你会失去时间,血液和痛苦。
Compression FAQ有关于JPEG如何工作的一些细节。一个好的起点是第2部分:主题75:JPEG简介。
概括地说,对于一个典型的JPEG文件,你将不得不逆转编码步骤6至4:
- (6)提取从JFIF容器
- 适当的报头和图像数据( 5)逆转Huffman编码
- (4)反向量化
,那么你应该留下8×8块,你可以喂到合适的逆DCT。
维基百科有关于JFIF格式以及JFIF中的霍夫曼表和structure of the JPEG数据的一些细节。
我假设你正在寻找使用JPEG来了解它?因为如果你有一些实际的应用,访问原始编码块几乎肯定不是必需的。
在看到评论后编辑:如果您只是想在不读取/解压缩整个文件的情况下获得非常大的JPEG的一部分,则可以使用ImageMagick的stream
命令。它允许你在不读取整个文件的情况下获取子图像。使用像例如从(16,16)开始获得一个8x8块。
我对学习和开发感兴趣面向未来的人脸识别软件。但现在我想学习基础知识。 – NiVeR 2012-04-20 19:32:11
- 1. c#将图像分割成小块
- 2. C#中的图像分割(行分割和字符分割)
- 3. 在Python中分割图像
- 4. C中的Dicom图像分割#
- 5. 在分割图像上难以悬停
- 6. 将图像张量分割成小块
- 7. 图像分割
- 8. Pixelate和c分割成部分图像#
- 9. 图形分割成块的C#
- 10. 图像分割(MATLAB)
- 11. 用于图像分割的C++库
- 12. 在Python中分割并加入图像
- 13. 如何在许多图像中分割图像?在R
- 14. c#:在以100%质量保存JPEG时降低图像质量
- 15. 将图像分割成多张图像
- 16. 分割断块
- 17. Flash Lite 2分割图像
- 18. 分割文档图像
- 19. 这是图像分割吗?
- 20. 动态分割图像
- 21. 图像分割技术
- 22. android上的图像分割
- 23. itk - 3D图像的分割
- 24. 平滑分割图像
- 25. iOS的图像分割
- 26. 开罗分割图像
- 27. PyGame Saving Webcam,图像分割
- 28. 图像分割Matlab的
- 29. 谷物图像分割
- 30. SDL图像分割屏幕
你已经在内存中的图像,并准备对它执行DCT? – GManNickG 2012-04-20 18:26:06
是的。 – NiVeR 2012-04-20 18:28:43
我还有点不清楚。你的意思是你有内存中的压缩数据吗?如果是这样,你会想要执行* inverse * DCT来恢复空间数据。在这种情况下,它已经被分成了8x8块。如果你在内存中有“原始”像素,并且想要进行JPEG压缩,那么你会将它分解为8x8块,然后在每个块上进行DCT。 – 2012-04-20 18:43:53