How to convert GIF image into JPG without making it gray.
2 visualizzazioni (ultimi 30 giorni)
Mostra commenti meno recenti
hello, I have a GIF image and want to divide it into frames. then I convert each frame into jpg format. GIF image is colored but I obtain gray images from bellow codes after saving each frame while I need colored frames. can any one help me plz?
for k=1:25
[img,map] = imread('D:/myimage.gif','frames',k);
thisImage{k}=img
save(sprintf('E:/myvibe/img%d.mat',k),'img');
save('map.mat','map');
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
baseFileNamee = sprintf('imgg%d.png', k); % e.g. "1.png"
fullFileNamee = fullfile(Resultados, baseFileNamee);
imwrite(thisImage{k}, fullFileNamee);
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%save(sprintf('E:/vibefolder/img%d.jpg',k),'img');
%save('map.mat','jpg');
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
figure;
imshow(img,map);
end
0 Commenti
Risposte (2)
Image Analyst
il 29 Ott 2016
I think you're going to have to use ind2rgb() since GIF is an indexed format.
0 Commenti
DGM
il 23 Giu 2023
Modificato: DGM
il 23 Giu 2023
All GIF files are indexed color. JPG images are not indexed color; most are RGB. While ind2rgb() could be used to convert to RGB explicitly, it's not normally necessary unless you want certain assurances.
The core problem is the fact that the map is being discarded and a gray colormap is being substituted when writing the image. This will happen regardless of whether the output file format supports indexed color images.
[inpict map] = imread('canoe.tif');
imwrite(inpict,'bad.jpg') % a default gray colormap is used
bad = imread('bad.jpg'); % JPG does not support indexed color, but PNG does
imshow(bad,'border','tight')
To make sure the correct map is used, simply make sure to pass the map to imwrite().
imwrite(inpict,map,'good.jpg') % the correct colormap is used
good = imread('good.jpg'); % JPG does not support indexed color, but PNG does
imshow(good,'border','tight')
If you're writing to a format that supports indexed color, imwrite() will write an indexed color image. If you're writing to a format like JPG that does not support indexed color, imwrite() will handle the conversion internally.
On the other hand, if you're writing to a format like GIF which only supports indexed color, imwrite() will convert RGB inputs to indexed color. If in that scenario you were to pre-convert the image with ind2rgb(), you're unnecessarily converting to RGB and then back to an indexed color image, so you would accomplish nothing other than wasting CPU time and slightly degrading the image quality.
The scenario in which you would need to explicitly convert the image prior to writing is if you're writing to a format which supports both RGB and indexed color (e.g. PNG), and you want to ensure that the image does not stay in indexed color. This may be relevant, since despite the question asking about converting to JPG, the code is actually converting to PNG instead.
0 Commenti
Vedere anche
Categorie
Scopri di più su Modify Image Colors in Help Center e File Exchange
Prodotti
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!