回答
你必須解壓縮圖像,使用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. 在固定塊中分割圖像
- 3. C#中的圖像分割(行分割和字符分割)
- 4. 在Python中分割圖像
- 5. C中的Dicom圖像分割#
- 6. 在分割圖像上難以懸停
- 7. 將圖像張量分割成小塊
- 8. 圖像分割
- 9. 圖像分割
- 10. Pixelate和c分割成部分圖像#
- 11. 圖形分割成塊的C#
- 12. 難以迴應JPEG圖像
- 13. 圖像分割(MATLAB)
- 14. Matlab分割圖像
- 15. 用於圖像分割的C++庫
- 16. 在android中分割圖像爲瓷磚
- 17. 在python中使用OpenCV分割圖像
- 18. 在Python中分割並加入圖像
- 19. 使用c/C++讀取jpeg圖像
- 20. C地塊分割c語言
- 21. 如何在許多圖像中分割圖像?在R
- 22. c#:在以100%質量保存JPEG時降低圖像質量
- 23. 使用matlab實現圖像分割中分割圖像包含多少片
- 24. 將圖像分割成多張圖像
- 25. 分割斷塊
- 26. iOS的圖像分割
- 27. 分割文檔圖像
- 28. itk - 3D圖像的分割
- 29. 使用ImageJ分割圖像
- 30. 使用java分割圖像
你已經在內存中的圖像,並準備對它執行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