
如何将圖像寫入檔案
我在這種情況下特别困
I = imread('liftingbody.png'); S = qtdecomp(I,.27); blocks = repmat(uint8(0),size(S)); for dim = [512 256 128 64 32 16 8 4 2 1]; numblocks = length(find(S==dim)); if (numblocks > 0) values = repmat(uint8(1),[dim dim numblocks]); values(2:dim,2:dim,:) = 0; blocks = qtsetblk(blocks,S,dim,values); end end blocks(end,1:end) = 1; blocks(1:end,end) = 1; imshow(I), figure, imshow(blocks,[]) (以上示例來自MATLAB幫助)
如果我嘗試使用imwrite(blocks)來寫圖像(即imwrite(blocks)則整個圖像看起來都是黑色的。任何輸入圖像都會發生這種情況。但是我想準确地寫出imshow在這裡顯示的輸出。有人可以幫忙嗎?
回答:
您将塊建立為uint8矩陣。按照慣例,MATLAB和圖像處理工具箱将uint8灰階視為範圍在0到255之間的值。也就是說,0是黑色,而255是白色。是以,您的僅包含0和1的塊矩陣通常将顯示為黑色且幾乎為黑色。
當您使用以下方法顯示塊時:
imshow(blocks,[]) 您使用了imshow的“自動調整範圍”文法,該文法将塊的最小值顯示為黑色,将塊的最大值顯示為白色。
但是,當您使用imwrite儲存塊時,通常将0假定為黑色,将255假定為白色。
嘗試将塊初始化為邏輯矩陣,如下所示:
blocks = logical(size(S)); MATLAB和圖像處理工具箱将邏輯矩陣視為二進制圖像,并将0顯示為黑色,而1顯示為白色。如果傳遞邏輯矩陣進行寫入,它将建立一個1位深度的二進制映像檔案。
更多&回答...