png图片在有Alpha通道的情况下读入matlab可能整个图片都会变黑
这时即使用Matlab的imwrite将其转换为jpg格式也仍会出现上图的现象,最快捷的方法是删除png图片的Alpha
通道,通过pngcrush工具可以实现;
另一种可行的方法是:
- 利用图片工厂批量转换png图片为png格式,这种方法同样可以去掉透明背景,但是图片工厂的算法会将透明背景随机填充一种除图片中所含颜色外的一种颜色,颜色取值按uint8格式从小到大取(0为绿色);
- 将所有转换后的图片读入Matlab(或任一种编程语言),把随机填充的背景颜色全部替换为白色(255,255,255);
- 用imwrite写入到原路径覆盖原图像;
实现代码如下:
% 本程序将 png 图片转换为 jpg 图片
clc,clear
s = [ "Jeep", "MINI" ];
for m = 1:length(s)
pngs = dir('G:\AutoLogosCopy\'+ s(m) + '\*_*.png');
num_pngs = length( pngs );
for i = 1 : num_pngs
png_file = fullfile( 'G:\AutoLogosCopy\', s(m), pngs(i).name );
png = imread( png_file);
% 读取像素(1, 1)的颜色值
jpg1 = png(1, 1, 1);
jpg2 = png(1, 1, 2);
jpg3 = png(1, 1, 3);
[M, N, L] = size(png);
% 将所有颜色值与(1, 1)相同的像素点替换为白色
for j = 1 : M
for k = 1 : N
if(png(j, k, 1) == jpg1 && png(j, k, 2) == jpg2 && png(j, k, 3) == jpg3)
png(j, k, 1) = 255;
png(j, k, 2) = 255;
png(j, k, 3) = 255;
end
end
end
%%% 将 png_file 转换为 jpg 格式图片,并保存. %%%
% 第一步,解析文件名 png_file ,注意,png_file 包括路径+文件名+后缀,如 png_file = 'G:\AutoLogosCopy\Jeep\test.png'
% path = G:\AutoLogosCopy\Jeep\' name = 'test' ext = '.png'
% [ path , name , ext ] = fileparts( png_file ) ;
% 第二步,生成新的文件名
% filename = strcat( name , '.jpg' );
% 第三步,生成文件全称
% jpg_file = fullfile( 'G:\AutoLogosCopy\MINI\' , filename ) ;
% 第四步,将 png 以 jpg_file 作为文件名,保存为 jpg 格式.
imwrite( png , png_file );
end
end