Matlab替换PNG图片透明背景为白色(先删除Alpha通道)

png图片在有Alpha通道的情况下读入matlab可能整个图片都会变黑

Matlab替换PNG图片透明背景为白色(先删除Alpha通道)_第1张图片
这时即使用Matlab的imwrite将其转换为jpg格式也仍会出现上图的现象,最快捷的方法是删除png图片的Alpha通道,通过pngcrush工具可以实现;
另一种可行的方法是:

  1. 利用图片工厂批量转换png图片为png格式,这种方法同样可以去掉透明背景,但是图片工厂的算法会将透明背景随机填充一种除图片中所含颜色外的一种颜色,颜色取值按uint8格式从小到大取(0为绿色);
    Matlab替换PNG图片透明背景为白色(先删除Alpha通道)_第2张图片
  2. 将所有转换后的图片读入Matlab(或任一种编程语言),把随机填充的背景颜色全部替换为白色(255,255,255);
    Matlab替换PNG图片透明背景为白色(先删除Alpha通道)_第3张图片
  3. 用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

你可能感兴趣的:(Matlab)