【问题标题】:Make a pixel transparent in Matlab在 Matlab 中使像素透明
【发布时间】:2012-04-30 02:19:00
【问题描述】:

我在 matlab 中导入了一个图像,在显示它之前如何使图像的背景透明?例如我有一个白色背景上的红色球,我如何使图像的白色像素透明,以便只有红色球可见而白色像素是透明的?

【问题讨论】:

    标签: matlab matlab-figure matlab-guide


    【解决方案1】:

    您需要确保图像以“png”格式保存。然后可以使用 png 文件的'Alpha' parameter,它是一个矩阵,分别指定每个像素的透明度。它本质上是一个布尔矩阵,如果像素是透明的则为 1,否则为 0。这可以通过 for 循环轻松完成,只要您想要透明的颜色始终是相同的值(即 uint8 为 255)。如果它不总是相同的值,那么您可以定义一个阈值或值范围,该像素将是透明的。

    更新:

    首先通过遍历图像生成 alpha 矩阵,并且(假设您将白色设置为透明)每当像素为白色时,将该像素处的 alpha 矩阵设置为 1。

    # X is your image
    [M,N] = size(X);
    # Assign A as zero
    A = zeros(M,N);
    # Iterate through X, to assign A
    for i=1:M
       for j=1:N
          if(X(i,j) == 255)   # Assuming uint8, 255 would be white
             A(i,j) = 1;      # Assign 1 to transparent color(white)
          end
       end
    end
    

    然后使用这个新创建的 alpha 矩阵 (A) 将图像保存为“.png”

    imwrite(X,'your_image.png','Alpha',A);
    

    【讨论】:

    • 谢谢@ademing2。你有一个简短的例子吗?
    • 谢谢。但是,图像输出只有 1x1 和 87 字节。有什么想法吗?
    【解决方案2】:

    注意 MATLAB 中的 for 循环应该不惜一切代价避免,因为它们很慢。重写代码以删除循环通常称为“矢量化”代码。在ademing2的回答的情况下,可以这样做:

    A = zeros(size(X));
    A(X == 255) = 1;
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-03-14
      • 1970-01-01
      • 2016-06-14
      • 2021-06-30
      • 2019-05-14
      • 1970-01-01
      • 2013-09-16
      • 2014-04-12
      相关资源
      最近更新 更多